有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件物品,我們只考慮是否要...