下面代码是利用滚动数组求解0/1背包问题,请完善代码。
//求解0/1背包问题的算法
#include <iostream>
#include <cstring>
#include <algorithm>
#define MAXN 10 //最多物品数
#define MAXW 100 //最大限制重量
using namespace std;
//问题表示
int n , W; //n:物品数量, W:背包限制重量
int w[MAXN]; //每种物品的重量
int v[MAXN]; //每种物品的价值
int Knap() { //动态规划法_滚动数组求0/1背包问题
int dp[MAXW + 1];
memset(dp, 0, sizeof(dp));
for (int i = 1; i <= n; i++) {
for (int r =//填空1;//填空2; //填空3) {
dp[r] = max(dp[r], //填空4);
}
}
return //填空5;
}
int main() {
cin >> n >> W;
for(int i = 1; i <= n; i++)
cin >> w[i] >> v[i];
cout << Knap() << endl;
return 0;
}
填空1:W
填空2:r>=w[i]
填空3:r--
填空4:dp[r-w[i]]+v[i]
填空5:dp[W]