题解:01背包
#include<iostream> #include<cstdio> #include<cstring> #define maxn 5000 using namespace std; int n,m,c[maxn],w[maxn],f[maxn*3]; int main(){ scanf("%d%d",&n,&m); for(int i=1;i<=n;i++)scanf("%d%d",&c[i],&w[i]); for(int i=1;i<=n;i++) for(int j=m;j>=c[i];j--) f[j]=max(f[j],f[j-c[i]]+w[i]); printf("%d\n",f[m]); return 0; }