AcWing 2. 01背包
原题链接
简单
作者:
MaHone
,
2020-07-16 23:15:17
,
所有人可见
,
阅读 2
C++ 代码
/*
f[i][j]:表示只需前i个物品,总体积是j的情况下,总价值最大是多少
resulit=max(f[n][0-V])
f[i][j]
1.不选第i个物品 f[i][j]=f[i-1][j];
2.选第i个物品,f[i][j]=f[i-1][j-v[i]]
f[i][j]=max(1,2)
f[0][0]初始化 什么都不选的情况下最大值为0
*/
#include <bits/stdc++.h>
using namespace std;
const int N=1010;
int n,m;
int f[N][N];
int v[N],w[N];
int main(){
ios::sync_with_stdio(0);
cin.tie(0);
cin>>n>>m;
for(int i=1;i<=n;i++)cin>>v[i]>>w[i];
for(int i=1;i<=n;i++)
for(int j=0;j<=m;j++){
f[i][j]=f[i-1][j];//首先是第i个物品不选
if(j>=v[i])
f[i][j]=max(f[i][j],f[i-1][j-v[i]]+w[i]);
}
int ans=0;
for(int i=0;i<=m;i++)
ans=max(ans,f[n][i]);
cout<<ans<<endl;
return 0;
}