http://acm.hdu.edu.cn/showproblem.php?pid=1171
//1305008 2009-04-24 17:36:03 Accepted 1171 2015MS 1260K 838 B C++ no way
//1305033 2009-04-24 17:42:02 Accepted 1171 796MS 760K 664 B C++ no way
#include<iostream>
#include<cmath>
using namespace std;
int outs[250002];
int main()
  {
int n;
while(cin>>n && n>=0)//A test case starting with a negative integer terminates input
//and this test case is not to be processed 这句话让我错了很多次 ,值得注意
 {
int i,j,k,s,N=0,t;
int w[51],num[51];
for(i=1;i<=n;i++)
 {
scanf("%d%d",&w[i],&num[i]);
N += w[i] * num[i];
}
t = N/2; //取其一半

for(i=0;i<=N;i++)
outs[i] = 0;
for(i=0;i<=num[1];i++)
outs[i*w[1]] = 1;

for(i=2;i<=n;i++)
 {
for(j=0;j<=t;j++)
 {
for(k=0,s=0;s<=num[i] && k+j<=t; k+=w[i],s++)
if( outs[j] == 1)
outs[k+j] = 1;
}
}
for(i = t; i>=0 ;i--)
if(outs[i] !=0 )
break;
printf("%d %d\n",i + N-2*i ,i);
}
return 0;
}
|