AcWing 2. 01背包问题
原题链接
简单
作者:
hegehog
,
2020-07-06 17:48:45
,
所有人可见
,
阅读 434
c++代码
#include <iostream>
using namespace std;
const int NUM = 1005;
int v[NUM],w[NUM];
int f[NUM][NUM];
int N,V;
int main()
{
cin >> N >> V;
for(int i = 1; i <= N; i ++)
cin >> v[i] >> w[i];
for(int i = 1; i <= N; i ++)
for(int j = 0; j <= V; j ++){
f[i][j] = f[i-1][j];
if(j - v[i] >= 0)
f[i][j] = max(f[i][j], f[i-1][j-v[i]] + w[i]);
}
cout << f[N][V] << endl;
return 0;
}
//f[i,j]
//集合:前i个物品体积为j的所有方案
//属性:最大值
//状态计算:不取第i个和取第i个,两者之间的最大值 f[i,j] = max(f[i-1,j], f[i-1,j-Vi]+Wi)