01揹包問題【動態規劃法求解】通俗易懂,適合小白

本人此時還是一名研一的小菜雞,剛學會了這個算法的基本概念,來總結一下,誰知道今後的我再看到這篇自己寫的博客的時候會不會笑出來,哈哈哈哈哈哈哈哈,所以嗎,錯了的化大佬們評論指正就好了。

還有系列文章分支限界法解01揹包問題,回溯法解01揹包問題哈,需要的化以下是鏈接:

分支限界法:https://blog.csdn.net/qq_29051107/article/details/103395841

回溯法:https://blog.csdn.net/qq_29051107/article/details/103395285

1揹包問題題幹(題目中所給出的條件和問題)

給定n種物品和一揹包。物品i的體積是si,其價值爲vi,揹包的容量爲C。問應如何選擇裝入揹包的物品,使得裝入揹包中物品的總價值最大? 設用V[i,j]表示從前i項物品中裝入體積爲j的揹包的物品的最大價值,以下爲V[i,j]的表達式

其中C=9,有4種物品S1=2, S2=3, S3=4, S4=5, V1=3, V2=4, V3=5, V4=7。

剛開始看的時候,上邊這個公式看的我頭有點暈,於是我將他們寫到了每個題的下邊,不用每次都去翻前邊的題幹去。

C:揹包容量,此題中爲9

Si:物品i的體積            此題中爲 {2,3,4,5}

Wi(Vi,兩種不同的寫法而已):物品i的價值  此題中爲{3,4,5,7}

 

2動態規劃法求解

將帶求解問題分解成若干子問題,先求解子問題,然後從這些子問題的解得到原問題的解。(與分治法類似)
所求問題經分解得到的子問題不是相互獨立的。(與分治法不同)

動態規劃法解決01揹包問題,最主要的就是一個動態規劃表如下:

注意其中的高亮部分,高亮部分代表,體積此時滿足可以放入下一個物品時,要考慮下是否要放入下一個物品

以i = 3時爲例:

此時i = 3,表明我們可以在前三個物品中依次進行選擇是否放入(注意是依次,不要上來就選擇物品3,要從物品1開始,依次選擇)。而前三個物品的體積分別爲2,3,4。所以我們揹包中的價值應該在以下幾個值進行改變。

2,此時價值爲3

3,此時價值爲4

4,此時價值爲5

5 = 2 + 3(表明此時物品一和二可以都被放入揹包了)此時價值爲物品1的價值加上物品2的價值:3 + 4 = 7

6 = 2 + 4(物品1和3可以同時被放入揹包了)此時價值爲 3 + 5 = 8

7 = 3 + 4(。。。。。自己理解)此時價值爲 4 + 5 = 9 

9 = 2 + 3 + 4(。。。。。自己理解)此時價值爲 3 + 4 + 5 = 12 

最多到9,因爲前三個物品體積最多是9,而且揹包容量最大也是9.這就限制着揹包中的價值最大量,也就是表格中所需要填寫的內容。

依次填滿表格,找出最優值即爲揹包所能承受的最大價值了。

 

具體代碼我就不現醜了,兩個for循環就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章