当前位置:首页C++ > 正文

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
野牛程序员教少儿编程与信息学竞赛-微信|电话:15892516892
  • C++DP:完全背包(Complete Knapsack)
  • 相关推荐

    最新推荐

    热门点击