有 n 件物品和乙個容量是 v的揹包。每件物品只能使用一次。第 i件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且價值最大。輸出最大價值。
輸入格式
第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n行,每行兩個整數 vi,wi,用空格隔開,分別表示第 i件物品的體積和價值。
輸出格式
輸出乙個整數,表示最大價值。
資料範圍
0輸入樣例
4 51 2
2 43 4
4 5輸出:
思路:動態規劃
1.狀態表示f[i,j]——(1)集合:所有只考慮前i個物品,且總體積不大於j的所有選法; (2)屬性:max
2.狀態計算——集合的劃分
樸素做法:
//動態規劃:分解為求子問題的最優解
//
#include using namespace std;
const int n = 1010;
int f[n][n]; //狀態表示:集合f[i][j]——前i個物品且總體積不大於j的最大價值(c++全域性變數會初始化為0)
int w[n],v[n]; //體積 和 價值
int main()
//f[0][0] 已經自動為0了,不用再寫了
//下面可以理解成打表
for (int i = 1; i <= n ; ++i) }}
cout《優化
//思路和上面的一致
#includeusing namespace std;
const int n=1010;
int f[n];
int v[n],w[n];
int main()
for(int i=1;i<=n;i++)
}cout<}
AcWing 2 01揹包問題
題目描述 有 n 件物品和乙個容量是 v的揹包。每件物品只能使用一次。第 i件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n行,每行兩個整...
acwing 2 01揹包問題
有 n 件物品和乙個容量是 v 的揹包。每件物品只能使用一次。第 i 件物品的體積是 vi,價值是 wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v,用空格隔開,分別表示物品數量和揹包容積。接下來有 n 行,每行兩個整數 ...
acwing2 01揹包問題
有n n件物品和乙個容量是v v的揹包。每件物品只能使用一次。第i i件物品的體積是 v i vi,價值是 w i wi。求解將哪些物品裝入揹包,可使這些物品的總體積不超過揹包容量,且總價值最大。輸出最大價值。輸入格式 第一行兩個整數,n,v n,v n,v,用空格隔開,分別表示物品數量和揹包容積。...