题目地址:http://acm.xidian.edu.cn/land/problem/detail?problem_id=1043
经典0-1背包。这是我写的第一个背包。利用dp思想。f[i]为容量为i的背包所放最大价值。核心代码是f[i]=max{ f[i] , f [ i - t [ i ] ] + s [ i ] };下面是AC代码。还需要继续学习。
1 #include<stdio.h> 2 #include<string.h> 3 #include<stdlib.h> 4 int f[500],s[500],t[500]; 5 int max(int a,int b) {return a>b?a:b;} 6 int main() 7 { 8 int T,n,m,i,j; 9 scanf("%d",&T); 10 while(T--) 11 { 12 memset(f,0,sizeof(f)); 13 memset(s,0,sizeof(s)); 14 memset(t,0,sizeof(t)); 15 scanf("%d%d",&n,&m); 16 for(i=1;i<=n;i++) 17 scanf("%d%d",&s[i],&t[i]); 18 for(i=1;i<=n;i++) 19 for(j=m;j>=t[i];j--) 20 f[j]=max(f[j],f[j-t[i]]+s[i]); 21 printf("%d\n",f[m]); 22 } 23 return 0; 24 }