这道题明显就是个01背包。所以直接套模板就好啦。
#include<bits/stdc++.h> #define MAXN 30000 using namespace std; int f[MAXN],w[MAXN],c[MAXN],n,v; int main(){ scanf("%d%d",&n,&v); for(int i=1;i<=n;i++) scanf("%d%d",&w[i],&c[i]); for(int i=1;i<=n;i++) for(int j=v;j>=w[i];j--) f[j]=max(f[j],f[j-w[i]]+c[i]); printf("%d ",f[v]); return 0; }