今天記錄下自己所學的動態規劃知識點
有三枚硬幣 2,5,7 拼成27元
最少需要幾枚硬幣
我自己理解的動態規劃實操兩部曲
第一曲:定義初始條件
第二曲:迴圈操作 以及狀態方程定義
給的m行n列的網路,有乙個機械人從左上角(0,0)出發,每一步/**
我的第乙個動態規劃程式
題目資訊:
有三枚硬幣 2,5,7 拼成27元
最少需要幾枚硬幣
看到最少:一般用動態規劃求解
1.初始條件:f[0]=0;
2.轉移方程 f[27]=min
*/#include
#include
#include
using
namespace std;
intmain()
;for
(i=1
;i<=
27;i++)}
printf
("%d\n"
,f[i-1]
);}
可以向下或者向右走一步,問有多少種不同的方式可以走到右下角
動態規劃小結:/**
題目:給定m行n列的網路,有乙個機械人從左上角(0,0)出發,每一步
可以向下或者向右走一步,問有多少種不同的方式可以走到右下角
*/#include
intmain()
}printf
("%d"
,f[m-1]
[n-1])
;return0;
}
1.確定狀態
2.轉移方程
3.初始條件和邊界情況
4.計算順序
題目3:
給你乙個整數陣列 nums ,請你找出陣列中乘積最大的連續子陣列(該子陣列中至少包含乙個數字),並返回該子陣列所對應的乘積。
題目4:連續子陣列的最大和/**
乘積最大子串行
2,3,-2,4
乘積最大為6
-2,0,1
乘積最大為0
思路:設定兩個值 maxp,minp
因為maxp*number[i] 可能成為最小值
minp*number[i] 可能成為最大值
初始條件
邊界值轉移方程
maxp[i+1]=max(maxp[i]*number[i+1],minp[i]*number[i+1],number[i+1])
minp[i+1]=min(minp[i]*number[i+1],maxp[i]*number[i+1],number[i+1])
dp[i + 1] = max(dp[i], maxp[i + 1])
*/#include
#include
#include
using
namespace std;
intmul
(int number,
int n)
return p;
}int
main()
;int max=
mul(number,5)
;printf
("%d\n"
,max)
;return0;
}
輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為o(n)。
示例1:
ac**:輸入: nums =[-
2,1,
-3,4
,-1,
2,1,
-5,4
]輸出:
6解釋: 連續子陣列 [4,
-1,2
,1] 的和最大,為 6。
/**
連續子陣列的最大和
輸入乙個整型陣列,陣列裡有正數也有負數。陣列中的乙個或連續多個整數組成乙個子陣列。求所有子陣列的和的最大值。
要求時間複雜度為o(n)。
輸入: nums = [-2,1,-3,4,-1,2,1,-5,4]
輸出: 6
解釋: 連續子陣列 [4,-1,2,1] 的和最大,為 6。
解決方案: */
#include
#include
#include
using
namespace std;
intmax_function
(int number,
int l)
return p;
}int
main()
;int m=
max_function
(number,9)
;printf
("%d\n"
,m);
return0;
}
動態規劃經典問題
from 實現在 維基百科對動態規劃的定義 動態規劃 英語 dynamic programming,簡稱dp 是一種在數學 電腦科學和經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題 1 和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於...
動態規劃經典問題
子串 在給定的字串中選取連續的一段 子串行 可以不連續,但是要保證出現的順序與原字串相同 比如字串abcdefg abc既是子串又是子串行 acd只是子串行 一 最大連續子串行和 給定乙個整數序列a1,a2 an。求最大的連續的子串行的和。比如的最大連續子串行的和為5 3 1 1 2 萬能列舉?每次...
動態規劃經典問題
只是談談看題感悟而已,並沒有寫題,則跟不用說刷題了。在看了演算法競賽入門經典,也就是劉汝佳寫的那本 一 中動態規劃專題,理會甚多。動態規劃問題,一般可以看為dag問題的,有許多類動態規劃原來儲存的是bool 的true或false只需改一改題意就變成了,什麼保證什麼什麼情況下,什麼最大,什麼最小的問...