赤裸裸的0-1背包问题 #include<iostream> using namespace std; #include<cstdio> int w[3405]; int d[3405]; int f[12885]; int main() { int n,m,i,v; while(scanf("%d%d",&n,&m)!=EOF) { for(i=1;i<=n;i++) scanf("%d%d",w+i,d+i); memset(f,0,sizeof(f)); for(i=1;i<=n;i++) for(v=m;v>=w[i];v--) if(f[v]<f[v-w[i]]+d[i]) f[v]=f[v-w[i]]+d[i]; int M=0; for(i=1;i<=m;i++) if(f[i]>M) M=f[i]; printf("%d/n",M); } return 0; }