AcWing 2. 01背包问题
原题链接
简单
作者:
sxzgg05
,
2024-10-29 09:30:14
,
所有人可见
,
阅读 2
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int MN = 10e3 + 10;
int dp[2][MN] = {0}, N, V, v[MN], w[MN];
void solve()
{
dp[0][0] = 0;
for(int i = 1; i <= N; i ++)
for(int j = 1; j <= V; j ++ )
{
if(j < v[i]) dp[i % 2][j] = dp[(i - 1) % 2][j];
else
{
dp[i % 2][j] = max(dp[(i - 1) % 2][j], dp[(i - 1) % 2][j - v[i]] + w[i]);
}
}
}
int main()
{
cin >> N >> V;
for(int i = 1; i <= N; i ++ ) cin >> v[i] >> w[i];
solve();
cout << dp[N % 2][V] << endl;
return 0;
}