返回首页 C++ 模板

完全背包模板

每种物品可以选无限次——正序遍历即可

完全背包 DP 无限 GESP6
#include <bits/stdc++.h>
using namespace std;

const int MAXW = 10010;

int main() {
    int n, W;
    cin >> n >> W;
    int w[n], v[n];
    for (int i = 0; i < n; i++) cin >> w[i] >> v[i];

    // 完全背包:正序遍历容量
    int dp[MAXW] = {};
    for (int i = 0; i < n; i++)
        for (int j = w[i]; j <= W; j++)
            dp[j] = max(dp[j], dp[j - w[i]] + v[i]);

    cout << dp[W] << endl;
    return 0;
}

📖 要点说明

⚠️ 常见错误