有 n 个物品和一个容量为 W 的背包。每个物品最多只能选择一次。请在背包总重量不超过 W 的情况下,求能够获得的最大总价值。

第一行输入两个整数 n, W, 分别表示物品数量和背包容量。

接下来 n 行,每行输入两个整数:w[i],v[i],分别表示第 i 个物品的重量和价值。


C++21 linesExpandCollapse
#include <bits/stdc++.h>
using namespace std;

int main() {
    int n, W;
    cin >> n >> W;
    
    vector<int> w(n), v(n);
    for (int i = 0; i < n; i++) cin >> w[i] >> v[i];
    
    vector<int> dp(W + 1, 0); // dp[i] 表示容量为 W 时的最大价值
    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;
}