動態規劃問題的筆記

2021-10-09 21:21:20 字數 904 閱讀 7824

組合問題公式

dp[i] += dp[i-num]

true、false問題公式

dp[i] = dp[i] or dp[i-num]

最大最小問題公式

dp[i] = min(dp[i], dp[i-num]+1)或者dp[i] = max(dp[i], dp[i-num]+1)

以上三組公式是解決對應問題的核心公式。

當然拿到問題後,需要做到以下幾個步驟:

1.分析是否為揹包問題。

2.是以上三種揹包問題中的哪一種。

3.是0-1揹包問題還是完全揹包問題。也就是題目給的nums陣列中的元素是否可以重複使用。

4.如果是組合問題,是否需要考慮元素之間的順序。需要考慮順序有順序的解法,不需要考慮順序又有對應的解法。

接下來講一下揹包問題的判定

揹包問題具備的特徵:給定乙個target,target可以是數字也可以是字串,再給定乙個陣列nums,nums中裝的可能是數字,也可能是字串,問:能否使用nums中的元素做各種排列組合得到target。

揹包問題技巧:

1.如果是0-1揹包,即陣列中的元素不可重複使用,nums放在外迴圈,target在內迴圈,且內迴圈倒序;

for num in nums:

for i in range(target, nums-1, -1):

2.如果是完全揹包,即陣列中的元素可重複使用,nums放在外迴圈,target在內迴圈。且內迴圈正序。

for num in nums:

for i in range(nums, target+1):

3.如果組合問題需考慮元素之間的順序,需將target放在外迴圈,將nums放在內迴圈。

for i in range(1, target+1):

for num in nums:

動態規劃 揹包問題筆記

理解動態規劃先從 通過金礦模型介紹動態規劃 之後,可以通過下面部落格的表來理解 動態規劃之01揹包問題 最易理解的講解 程式實現時,思路和畫表時相同 給出程式 coding utf 8 n為物品數量 c為揹包重量 w為每個物品重量 v為每個物品價值 def bag n,c,w,v res 1 for...

動態規劃筆記

動態規劃,維基上面的解釋是 動態規劃 英語 dynamic programming,dp 1 是一種在數學 電腦科學和經濟學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題 2 和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規...

動態規劃問題

思想 如果乙個問題是由交疊的子問題所構成,那麼我們就可以用動態規劃技術來解決它。一般來說,這樣的子問題出現在對給定問題求解的遞迴關係中。這個遞推關係包含了相 同問題的更小子問題的解。動態規劃法建議,與其對交疊子問題一次又一次的求解,不如把每個較小子問題只求解一次並把結果記錄在表中。例題 0 1揹包問...