有 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;
}