有上一个01背包的题,这个水题不多写了
解释:dp当前重量下选最大的价值
AC代码:
#include<iostream>
#include<vector>
#include<string>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<stack>
#include<cmath>
#include<cstdio>
#include<cstdlib>
using namespace std;
const int maxn = 3500;
const int maxm =13000;
int w[maxn], val[maxn], dp[maxm], n ,m;
void solve(){
for(int i = 1; i<=n;++i){
for(int j =m; j>=w[i];--j){
dp[j]=max(dp[j], dp[j-w[i]]+val[i]);
}
}
}
int main(){
while(~scanf("%d%d", &n, &m)){
for(int i=1; i<=n; ++i) scanf("%d%d", &w[i], &val[i]);
memset(dp, 0 ,sizeof(dp));
solve();
cout<<dp[m]<<endl;
}
return 0;
}