http://acm.hdu.edu.cn/showproblem.php?pid=1171

 

基础的01背包,求出总值sum,背包体积即为sum/2

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 using namespace std;
 5 int pr[5005],bao[250010];
 6 int main()
 7 {
 8     int sum,i,j,k,m,n,a;
 9     while(scanf("%d",&n)!=EOF)
10     {
11         if(n<=0)
12             break;
13         memset(bao,0,sizeof(bao));
14         sum=0;
15         i=0;
16         for(j=0;j<n;j++)
17         {
18             scanf("%d%d",&a,&m);
19             while(m--)
20             {
21                 pr[i++]=a;
22                 sum+=a;
23             }
24         }
25         for(j=0;j<i;j++)
26         {
27             for(k=sum/2;k>=pr[j];k--)
28             {
29                 bao[k]=max(bao[k],bao[k-pr[j]]+pr[j]);
30             }
31         }
32         printf("%d %d\n",sum-bao[sum/2],bao[sum/2]);
33     }
34     return 0;
35 }

 

posted on 2017-02-21 00:28  benTuTuT  阅读(149)  评论(0编辑  收藏  举报