//Bone Collector //0/1揹包問題 #include<stdio.h> #include<string.h> int max(int a,int b); int main(){ /* struct fuc{ int value; int volume; }b[1005]; int t,n,v,i,j,f[1005]; while(scanf("%d",&t)!=EOF){ while(t--){ scanf("%d%d",&n,&v); for(i=0;i<n;i++){ scanf("%d",&b[i].value); }//Input:value for(i=0;i<n;i++){ scanf("%d",&b[i].volume); }//Input:volume memset(f,0,sizeof(f)); for(i=0;i<n;i++){ for(j=v;j>=0;j--){ if(j>=b[i].volume) f[j]=max(f[j],f[j-b[i].volume]+b[i].value); } } printf("%d\n",f[v]); }滾動數組,需要打印時慎用! }*/ int t,n,v,i,j,value[1005],volume[1005]; static int d[1005][1005];// while(scanf("%d",&t)!=EOF){ while(t--){ scanf("%d%d",&n,&v); for(i=0;i<n;i++) scanf("%d",&value[i]); for(i=0;i<n;i++) scanf("%d",&volume[i]); memset(d,0,sizeof(d));// for(i=n-1;i>=0;i--){ for(j=0;j<=v;j++){ d[i][j]=d[i+1][j];//d[i][j]=(i==n-1?0:d[i+1][j]); if(j>=volume[i]) d[i][j]=max(d[i][j],d[i+1][j-volume[i]]+value[i]);//狀態轉移方程 } } printf("%d\n",d[0][v]); } } return 0; } int max(int a,int b){ return(a>b?a:b); }
Hdu2602
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.