分治法:
原問題分解為多個互不相交的子問題,組合子問題的解得到原問題的解。
動態規劃法:
不同的子問題具有公共的子子問題,使用分治法來解決具有公共子子問題的原問題,會有同一規模問題被多次重複計算。動態規劃法,將每乙個規模的解儲存在**中,使得不會重複計算。
求解最優化問題,問題有多個可行解,每個解對應乙個值,找到最優解使得其對應的值最大或最小。
設計乙個動態規劃演算法:
1、刻畫乙個最優解的結構特徵:原問題的最優解由相關的子問題最優解組合而成,根據題目資訊,確定如何劃分原問題得到子問題?通常,劃分是由題目條件和要求來確定的。
2、遞迴定義最優解的值
3、採用自底向上的方法求出最優解的值(較帶有備忘錄的自頂向下方法**更為簡單,判斷條件更少)
4、利用計算出的資訊構造最優解
給定不同面額的硬幣 coins 和乙個總金額 amount。編寫乙個函式來計算可以湊成總金額所需的最少的硬幣個數。如果沒有任何一種硬幣組合能組成總金額,返回 -1。
示例 1:
輸入: coins = [1, 2, 5], amount = 11
輸出: 3
解釋: 11 = 5 + 5 + 1
解法一:自底向上,使用vector儲存各個規模下最優解對應的值
class solution
int coinchanges(vector& coins, int amount)
if(memory[amount-1]!=0)
for(int coin:coins)
}memory[amount-1]=min==int_max?-1:min;//如果沒有合適的組合,返回-1
return memory[amount-1];
}};*/
動態規劃演算法
一 動態規劃演算法原理 將待求解的問題分解成若干個相互聯絡的子問題,先求解子問題,然後從這些子問題的解得到原問題的解 對於重複出現的子問題,只在第一次遇到的時候對它進行求解,並把答案儲存起來。了不去求解相同的子問題,引入乙個陣列,把所有子問題的解存於該陣列中,這就是動態規劃所採用的基本方法。動態規劃...
動態規劃演算法
動態規劃 通過把原問題分解為相對簡單的子問題來求解複雜問題。動態規劃常常適用於有重疊子問題和最優子結構性質的問題。演算法總體思想 演算法的基本步驟 演算法的基本要素 最優子結構 重疊子問題 備忘錄方法 問題描述 子串行 公共子串行 最長公共子串行 lcs 問題 問題分析 動態規劃求解lcs問題 最長...
動態規劃演算法
動態規劃演算法的思路 動態規劃法即 dynamic programming method dp 是系統分析中的種常用方法。動態規劃法是20世紀50年代由貝爾曼 r.bellman 等人提出的,用來解決多階段決策過程問題的一種最優化方法。多階段決策過程是指把研究問題分成若干個相互聯絡的階段,由每個階段...