题解 | #【模板】01背包#
【模板】01背包
https://www.nowcoder.com/practice/fd55637d3f24484e96dad9e992d3f62e
#include <bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int main() {
int n, nv;
cin >> n >> nv;
vector<int>v(n, 0), w(n, 0);
// 这里的取值是关键
vector<int>dp(nv + 1, -N);
for(int i = 0; i < n; i++)
cin >> v[i] >> w[i];
dp[0] = 0;
for(int i = 0; i < n; i++)
{
for(int j = nv; j >= v[i]; j--)
{
dp[j] = max(dp[j], dp[j - v[i]] + w[i]);
}
}
int m = *max_element(dp.begin(), dp.end());
cout << m << endl;
if(dp[nv] < 0)dp[nv] = 0;
cout << dp[nv];
}
// 64 位输出请用 printf("%lld")
查看11道真题和解析