01揹包問題

2021-08-17 18:38:46 字數 856 閱讀 5232

1.背景描述

有n件物品,每件物品的重量未w1,w2……wn,每件物品有相應的價值為v1,v2……vn;現在有乙個容量為c的揹包,現在要將物品放到揹包中,使得揹包中所含物品的價值最高。

2.公式表示

用乙個二維陣列來表示揹包中的價值f[i][v],i表示前i個物品,v表示揹包中剩餘容量。

對於第i件物品,(1) 物品的重量過大,無法放入揹包          f[i][v]=f[i-1][v]

(2) 物品可以放入揹包,但要選擇是否放入(取最大值)

i,放       f[i][v]=f[i-1][v-wi]+v(i)     

ii,不放   f[i][v]=f[i-1][v]

在這裡,可以考慮用遞迴的方法來做,但是遞迴的方法無法記錄上乙個狀態的情況,所以要用動態規劃的思路來做。

3.推導過程

第一行表示揹包容量依次為1.2.3.4.5……18的時候,不放商品的時候的價值,也就是為0;

第二行表示,只允許放商品一的時候的揹包價值

第三行表示,只允許放商品一和商品二的時候的揹包價值

同理,最後一行表示這些商品都允許放入的時候的揹包價值。

4.**實現

package algorithm;

public class kanpsack ;

int v = ;

for (int k = 1;k< n;k++)elseelse }}

}public static void main(string args)

}

揹包問題 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...