一方面學習揹包九講:
這個十分清晰,重點標記清楚。
但有些需要自己理解的和重點的,我做了如下筆記,方便別人理解,也方便自己複習,如有錯誤,歡迎指正。
狀態函式f[i][v] 表示==前i件物品放入容量為v的揹包可獲得的最大價值==
狀態遷移方程
f[i][v] =max
考慮下為什麼是這樣的,對於第i件物品,我們只考慮是否要把這個放進去,這取決與兩種情況:1. 不放進去,那麼前i-1件容量和最大可以是v -- f[i-1][v];
2. 放進去,那麼前i-1件容量和最大為v-c[i] -- f[i-1][v-c[i]]+w[i]
以上方法==時間和空間複雜度均為o(n*v)==
可以優化空間複雜度為o(v):
for
i = 1:n
for v = v:0
f[v] = max ;
注意由於i是從1:n,所以每當i增加1時,f[v]都之前的值,即f[i-1][v],因此需要v是逆序,這樣f[v-c[i]]中才不會被修改(v-c[i]/**
*@param cost i物品的費用
*@param weight i物品的價值
*/procedure zeroonepack(cost ,weight)
for v = v:cost
f[v] = max
初始化的細節問題
問法二: 沒有要求揹包裝滿,希望 weight 和最大
tips 初始化原因
1. 如果要求揹包恰好裝滿,那麼此時只有容量為0的揹包可能被價值為0的nothing「恰好裝滿」,
其它容量的揹包均沒有合法的解,屬於未定義的狀態,它們的值就都應該是-∞了。
2. 如果揹包並非必須被裝滿,那麼任何容量的揹包都有乙個合法解「什麼都不裝」,這個解的價值
為0,所以初始時狀態的值也就全部為0了
揹包問題學習筆記
有n件物品和乙個容量為v的揹包。第i件物品的費用是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。從這個題目中可以看出,01揹包的特點就是 每種物品僅有一件,可以選擇放或不放。01揹包問題的狀態轉移方程是 f i v max其中,即fi表示前i件物品恰放入乙個容量為v的揹包可以獲得的最...
揹包問題學習筆記
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...