Problem 1043 - Qinz大牛的 烦恼

题目地址: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 }

 

posted @ 2013-08-18 19:49  hjf007  阅读(184)  评论(0编辑  收藏  举报