#include<stdio.h> #include<string.h> #define max(x,y) x>y?x:y struct apple { int c; int w; }app[1001]; int main() { int i,n,v,j; while(scanf("%d%d",&n,&v)&&(n||v)) { int sum[1001]={0}; for(i=0;i<n;++i) scanf("%d%d",&app[i].c,&app[i].w); for(i=0;i<n;++i) { for(j=v;j>=app[i].c;j--) sum[j]=max(sum[j],sum[j-app[i].c]+app[i].w); } printf("%d ",sum[v]); } return 0; }
通过这题,表示发现了动规的递推与递归的分类算法,
这题是经典的01背包,
版权声明:本文为博主原创文章,未经博主允许不得转载。