01背包(一个物品只能用一次)
cin >> n >> m; //n为物品个数,m为背包容量
for(int i = 1; i <= n; i++) {
cin >> w[i] >> c[i]; //重量和价值
}
for(int i = 1; i <= n; i++) {
for(int j = m; j >= w[i]; j--) {
dp[j] = max(dp[j - w[i]] + c[i], dp[j]);
}
}
cout << dp[m] << endl;
完全背包(一个物品可以用无限次)
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> w[i] >> c[i];
}
for(int i = 1; i <= n; i++) {
for(int j = w[i]; j <= m; j++) {
dp[j] = max(dp[j - w[i]] + c[i], dp[j]);
}
}
cout << dp[m] << endl;