天天看點

算法.動态規劃.背包問題(完全背包,01背包,多重背包,多元背包,剛好裝滿)什麼是背包問題動态規劃類比實作對比

這節是總結和類比,如果看着比較籠統,請先自己編碼實作完全背包和01背包代碼,參考:

算法.動态規劃.完全背包問題 (Java,遞歸)_要錢也要自我實作-CSDN部落格01背包問題 錢币最少

算法.動态規劃.背包問題(完全背包,01背包,多重背包,多元背包,剛好裝滿)什麼是背包問題動态規劃類比實作對比

https://blog.csdn.net/weixin_42754896/article/details/123068850?spm=1001.2014.3001.5501算法.動态規劃.完全背包問題 (Java,遞歸)_要錢也要自我實作-CSDN部落格01背包問題 錢币最少

算法.動态規劃.背包問題(完全背包,01背包,多重背包,多元背包,剛好裝滿)什麼是背包問題動态規劃類比實作對比

https://blog.csdn.net/weixin_42754896/article/details/123068850?spm=1001.2014.3001.5501

什麼是背包問題

有這麼一個包包,要裝最大價值的東西,重量需要在包包的承受範圍内

算法.動态規劃.背包問題(完全背包,01背包,多重背包,多元背包,剛好裝滿)什麼是背包問題動态規劃類比實作對比

動态規劃

動态規劃是解決背包問題的思路: F(n) = F(n-1) + K

第一步有N中選擇,周遊這N中選擇,選一個最優的解

類比

東西編号 :   D1  D2  D3  D4
體積W  :   2   3   4   5
價值V  :   3   4   5   6
東西個數:
完全背包:  ∞   ∞   ∞   ∞
01背包 :    1   1   1   1
多重背包:  n1  n2  n3  n4
多元背包:  W1  W2  W3  W4 (重量,體積+重量限制)
恰好裝滿: 最後剩餘體積必須 =0 才可以
背包體積W:8
           

1. 01背包/多重背包 = 完全背包 + 東西個數限制

2. 多元背包: 多元控制條件,比如:體積,重量  同時限制 背包可以拿多少東西。

3. 多重背包 = N * D1  可以化解為 :01背包=D1  D1  D1 …… (N個)

4. 恰好裝滿: 體積最後需要剩餘為0才可以,這種也可以在湊錢中限制,湊100塊就必須湊夠,否則少給你你也不幹呀。 

實作對比

1. 最容易了解的實作是  疊代

2. 如果東西太多疊代代價太大, 可以轉為循環實作,但思想不變

參考文檔

動态規劃之背包問題系列 - 知乎

【算法總結】動态規劃-背包問題 - 郭怡柔 - 部落格園

什麼是動态規劃(Dynamic Programming)?動态規劃的意義是什麼? - 知乎

繼續閱讀