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...