揹包問題學習筆記(1)

2021-08-08 14:01:45 字數 1000 閱讀 5859

一方面學習揹包九講:

這個十分清晰,重點標記清楚。

但有些需要自己理解的和重點的,我做了如下筆記,方便別人理解,也方便自己複習,如有錯誤,歡迎指正。

狀態函式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...