C 01揹包問題

2021-10-03 01:42:27 字數 700 閱讀 4308

01揹包問題:

有n個重量和價值分別為wi,vi的物品。從這些物品中挑選出總重量不超過w的物品,求所有挑選方案中價值總和的最大值

輸入格式:

nw v

w輸出格式:

價值總和最大值

輸入:

42 3

1 23 4

2 25

輸出:

7解題思路:對每個物品有兩種選擇,選或者不選。選擇該物品的話,總價值會增加,剩下的可載重量會減少,如果不選擇,則兩者不會變化。用遞迴可以解出,不過會有重複計算,為了降低複雜度,可用記憶化搜尋–動態規劃

#include#includeusing namespace std;

const int maxn = 1000;

int n;

int w[maxn];

int v[maxn];

int w;

int dp[maxn+1][maxn+1];

int main()

cin>>w;

for(int i = 0; ij)

dp[i+1][j] = dp[i][j];

else }}

cout

}

C 0 1揹包問題

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

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用空格...