揹包問題學習筆記

2021-09-16 14:29:37 字數 1657 閱讀 3469

有n件物品和乙個容量為v的揹包。第i件物品的費用是c[i],價值是w[i]。求解將哪些物品裝入揹包可使價值總和最大。

從這個題目中可以看出,01揹包的特點就是:每種物品僅有一件,可以選擇放或不放。

01揹包問題的狀態轉移方程是:

f[i][v]=max
其中,即fi表示前i件物品恰放入乙個容量為v的揹包可以獲得的最大價值。

上述方程右邊可以理解為兩種情況,取最優值.

情況一:第i件不放進去,這時所得價值為:fi-1;

情況二:第i件放進去,這時所得價值為:fi-1]+w[i];

情況二的意思是,如果第i件放進去,那麼在容量v-c[i]裡就要放進前i-1件物品.(引用自)

有編號分別為a,b,c,d,e的五件物品,它們的重量分別是2,2,6,5,4,它們的價值分別是6,3,5,4,6,現在給你個承重為10的揹包,如何讓揹包裡裝入的物品具有最大的價值總和?

首先要明確這張表是至底向上,從左到右生成的.

只要你能通過找規律手工填寫出上面這張表就算理解了01揹包的動態規劃演算法。

為了敘述方便,用e2單元格表示e行2列的單元格,這個單元格的意義是用來表示只有物品e時,有個承重為2的揹包,那麼這個揹包的最大價值是0,因為e物品的重量是4,揹包裝不了

對於d2單元格,表示只有物品e,d時,承重為2的揹包,所能裝入的最大價值,仍然是0,因為物品e,d都不是這個揹包能裝的。(引用自)

var n = 5; //物品數量,該引數可以自行設定

var v = 10; //揹包體積,該引數可自行設定

var volumarray = [4, 3, 5, 2, 5];//物品體積組成的陣列,該引數可自行設定

var valuearray = [9, 6, 1, 4, 1];//物品價值組成的陣列,該引數可自行設定

var temparray = ;

for (let a = 0; a < n; a++)

}for (let i = 0; i < n; i++)

}}console.log(temparray[n - 1][v - 1]);

有n種物品和乙個容量為v的揹包,每種物品都有無限件可用。

第i種物品的體積是c,價值是w。求解將哪些物品裝入揹包可使這些物品的體積總和不超過揹包容量,且價值總和最大。

參考上述01揹包的轉移方程,不難得出:

f[i][v]=max
偽**實現如下:

for i=1...n

for v=0...v

for k=1...v/w[i]

f[i][v] = max;

給你六種面額1,5,10,20,50,100元的紙幣,假設每種幣值的數量都足夠多,編寫程式求組成n元的不同組合個數.

function fn (all) 

for (let j = 1; j <= all; j++)

for (let i = 1; i <= len; i++) }}

return res[len][all];

}

揹包問題學習筆記

01揹包問題 題目描述 乙個人有乙個最大裝載質量為m的揹包。現在有n件物品,它們的質量分別是w1,w2,wn,它們的價值分別為c1,c2,cn。若每種物品只有一件,求這個人的揹包所能裝載的最大價值。輸入格式 第一行兩個整數m,n,如題中所述。第2行到第n 1行每行二個整數wi,ci,表示每個物品的重...

學習筆記 揹包問題

有 n 件物品和乙個容量為 v 的揹包.第 i 件物品體積為 c i 價值為 w i 求揹包最大價值.f i j 表示前 i 種物品體積為 j 的最大價值,f i j max f i 1 j f i 1 j c i w i 時間複雜度 o vn f j 表示體積為 j 的最大價值,f j max f...

揹包問題學習筆記(1)

一方面學習揹包九講 這個十分清晰,重點標記清楚。但有些需要自己理解的和重點的,我做了如下筆記,方便別人理解,也方便自己複習,如有錯誤,歡迎指正。狀態函式f i v 表示 前i件物品放入容量為v的揹包可獲得的最大價值 狀態遷移方程f i v max考慮下為什麼是這樣的,對於第i件物品,我們只考慮是否要...