返回首页 C++ 模板

01背包模板

每个物品选或不选——最经典的动态规划模型

01背包 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];

    // 二维写法
    // dp[i][j] = 前 i 个物品,容量 j 的最大价值
    // for i: dp[i][j] = max(dp[i-1][j], dp[i-1][j-w[i]] + v[i])

    // 一维优化(倒序遍历容量)
    int dp[MAXW] = {};
    for (int i = 0; i < n; i++)
        for (int j = W; j >= w[i]; j--)
            dp[j] = max(dp[j], dp[j - w[i]] + v[i]);

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

📖 要点说明

⚠️ 常见错误