C++DP:完全背包(Complete Knapsack)
作者:野牛程序员:2025-11-10 08:00:32C++阅读 2210
C++DP:完全背包(Complete Knapsack)
DP:完全背包(Complete Knapsack)
✅ 功能说明
每件物品可以选无限次
✅ 代码模板
#include <bits/stdc++.h>
using namespace std;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n, W;
cin >> n >> W;
vector<int> weight(n+1), value(n+1);
for(int i=1;i<=n;i++){
cin >> weight[i] >> value[i];
}
vector<int> dp(W+1, 0);
// 完全背包:容量从小到大更新,允许重复使用
for(int i=1;i<=n;i++){
for(int j=weight[i]; j<=W; j++){
dp[j] = max(dp[j], dp[j - weight[i]] + value[i]);
}
}
cout << dp[W] << "\n";
return 0;
}✅ 输入样例
3 5 1 2 2 4 3 4
✅ 输出样例
10
说明
物品 1 可无限使用:5 次 → 2×5 = 10
最佳为 10
野牛程序员教少儿编程与信息学奥赛-微信|电话:15892516892

