動態規劃學習(一) 最值型

2021-10-09 23:47:15 字數 960 閱讀 4625

例題1 硬幣組合問題

動態規劃組成部分一:確定狀態

動態規劃組成部分二:轉移方程

動態規劃組成部分三:初始條件和邊界情況

小結lintcode 669

想法1 盡量用大的硬幣

結果是:7 + 7 + 7 = 21 ,21 + 2 + 2 + 2 = 27,共6枚硬幣

正確答案:7 + 5 + 5 + 5 + 5 = 27,5枚硬幣

對於例題1,

關鍵點1:我們不關心前面的k-1枚硬幣是如何拼出27 - ak 的(或有1種拼法或100種),而且甚至現在不知道 ak 和k,但我們確定前面的硬幣頻出了27 - ak 。

關鍵點2:因為是最優策略,所以拼出27 - ak 的硬幣數量一定要最少。

只要找到子問題,就可以用動態規劃求解,如何確定狀態十分重要

這樣的遞迴會導致有些節點被重新計算,時間複雜度過高,如圖中的紅色節點

-2. 轉移方程

-3.初始條件和邊界情況

-4.計算順序

public int coinchange(int a, int m) 

for (j = 0; j < n; ++j)

} }if ( f[m] == interger.max_value)

return f[m];

}

191 乘積最大子串行 兩個最值型動態規劃

中文english 找出乙個序列中乘積最大的連續子串行 至少包含乙個數 樣例 1 輸入 2,3,2,4 輸出 6樣例 2 輸入 1,2,4,1 輸出 8 陣列長度不超過20000 乘積最大的子串行的積,小於2147483647 輸入測試資料 每行乙個引數 如何理解測試資料?class solutio...

區間型動態規劃

給定乙個序列 字串,進行一些操作 最後一步將序列 字串去頭 去尾 剩下的會是乙個區間 i,j 狀態自然定義為f i j 表示面對子串行 i j 時的最優性質 667.最長的回文序列 中文english 給一字串 s,找出在 s 中的最長回文子串行的長度.你可以假設 s 的最大長度為 1000.exa...

動態規劃學習(一)

分治方法將問題劃分為互不相交的子問題,遞迴地求解子問題,再將它們的解組合起來,求出原問題的解。與之相反,動態規劃應用於子問題重疊的情況,即不同的子問題具有公共的子子問題。對於分治方法,在處理問題的時候,會反覆求解那些公共子子問題。而動態規劃演算法對每個子子問題只求解一次,將其儲存在乙個 中,從而無需...