0 1揹包問題

2021-06-20 20:42:30 字數 557 閱讀 3775

有n個物品,對於第i個物品,重量為wi,價值為vi

有乙個揹包,能裝的總重量為w

求一種組合使揹包裝的物品價值最大

設該演算法為f(i, w),返回值是該條件下能裝物品價值的最大值(至於組合,在演算法中再具體記錄)

其中,i表示只在前i種物品中選擇,w表示能裝的最大重量為w,所以該問題即求f(n, w)

當i > w時,f(i, w) = f(i-1, w)

即,當i物品重量大於揹包能承受總重量時,不裝入該物品

當i <= w時,f(i, w) = max( f(i-1, w), vi + f(i-1, w-wi) )

即,當i物品重量不大於揹包能承受總重量時,則在不裝入或裝入該物品兩種選擇中選值較大者

終止條件為

f(0, w) = 0

f(i, 0) = 0

這類動態規劃有兩個規模引數,做快取記錄時也應該使用二維key

但基本思路不變,就是看當前規模問題的答案能否用更小規模問題的答案來算得

對於第i個物品,有裝和不裝兩種選擇,答案取其大者,而兩種選擇的答案均可以從i-1的規模問題的答案中獲得

揹包問題 01揹包問題

n個物品,總體積是v,每個物品的體積的vi,每個物品的最大價值是wi,在不超過v的體積下求最大價值 eg揹包容積為 5 物品數量為 4 物品的體積分別為 物品的價值分別為 思路定義乙個二位陣列int f new int n 1 v 1 f i j 就表示在1 i個物品中選取體積小於v的情況的最大價值...

揹包問題 01揹包

有n件物品和乙個容量為v的揹包。第i件物品的重量是c i 價值是w i 求解將哪些物品裝入揹包可使價值總和最大。01揹包中的 01 就是一種物品只有1件,你可以選擇放進去揹包即1,也可以選擇不放入揹包中即0。include include using namespace std const int ...

揹包問題(01揹包)

1085 揹包問題 在n件物品取出若干件放在容量為w的揹包裡,每件物品的體積為w1,w2 wn wi為整數 與之相對應的價值為p1,p2 pn pi為整數 求揹包能夠容納的最大價值。input 第1行,2個整數,n和w中間用空格隔開。n為物品的數量,w為揹包的容量。1 n 100,1 w 10000...