标签:
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 27004 Accepted Submission(s): 9514
#include<iostream> #include<cstdio> #include<cstring> #include<string> #include<cmath> #include<cstdlib> #include<queue> #include<vector> #include<set> #include<stack> #include<map> using namespace std; int n,val[60],num[60],maxx,sum; int c1[250010],c2[250010]; int main() { while(scanf("%d",&n)!=EOF&&n!=-1) { sum=0; memset(val,0,sizeof(val)); memset(num,0,sizeof(num)); for(int i=1;i<=n;i++) { scanf("%d%d",&val[i],&num[i]); sum+=val[i]*num[i]; } memset(c1,0,sum*sizeof(c1[0])); memset(c2,0,sum*sizeof(c2[0])); for(int i=0;i<=val[1]*num[1];i+=val[1]) c1[i]=1; maxx=val[1]*num[1]; for(int i=2;i<=n;i++) { for(int j=0;j<=maxx;j++) { for(int k=0;k<=val[i]*num[i];k+=val[i]) { c2[k+j]+=c1[j]; } } maxx+=val[i]*num[i]; for(int j=0;j<=maxx;j++) c1[j]=c2[j],c2[j]=0; } for(int i=sum/2;i>=0;i--) { if(c1[i]!=0) { printf("%d %d\n",sum-i,i); break; } } } return 0; }
标签:
原文地址:http://www.cnblogs.com/water-full/p/4461340.html