C 0 1揹包問題

2021-09-08 12:45:08 字數 962 閱讀 3512

0-1揹包問題

0-1揹包問題基本思想:

p[i,j]表示在前面i個物品總價值為j時的價值最大值。str[i, j]表示在前面i個物品總價值為j時的價值最大值時的物品重量串。

i=0 或者j=0時:

p[i, j] = 0;

str[i, j] = "";

第i件物品的在重量小於j時能夠放入揹包

p[i, j] = p[i - 1, j - w[i - 1]] + v[i - 1] > p[i - 1, j] ? p[i - 1, j - w[i - 1]] + v[i - 1] : p[i - 1, j];

str[i, j] = p[i - 1, j - w[i - 1]] + v[i - 1] > p[i - 1, j] ? str[i - 1, j - w[i - 1]] + w[i - 1].tostring() : str[i-1,j];

第i件物品的在重量大於j時不能夠放入揹包:

p[i, j] = p[i, j - 1];

str[i, j] =str[i-1,j];

**例如以下:

class program

;int v = ;

string[,] str = getpackage(w,v,10);

for (int i = 0; i < str.getlength(0); i++)

console.read();

}static string[,] getpackage(int w, int v, int maxweight)

else

else//第i件物品在重量大於j時不能放入揹包。此時的總價值為重量為j-1時的總價值,總貨物為不放入第i件物品時的總貨物}}

}return str;}}

測試結果例如以下圖:

C 01揹包問題

01揹包問題 有n個重量和價值分別為wi,vi的物品。從這些物品中挑選出總重量不超過w的物品,求所有挑選方案中價值總和的最大值 輸入格式 nw v w輸出格式 價值總和最大值 輸入 42 3 1 23 4 2 25 輸出 7解題思路 對每個物品有兩種選擇,選或者不選。選擇該物品的話,總價值會增加,剩...

C 01揹包問題

有n件物品和乙個容量為v 的揹包。放入第 i 件物品耗費的空間是 c i 得到的價值是 w i 求解將哪些物品裝入揹包可使價值總和最大。這是最基礎的揹包問題,特點是 每種物品僅有一件,可以選擇放或不放。用子問題定義狀態 即 f i,v 表示前i件物品恰放入乙個容量為v的揹包可以獲得的最大價值。則其狀...

揹包問題詳解(c ) 01揹包

有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i件物品的體積是 v,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。第一行兩個整數 n,v用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,每行兩個整數 vi,wi用空格...