2 10 1 20 1 3 10 1 20 2 30 1 -1
20 10 40 40
#include<iostream>
using namespace std;
struct fac
{
int v,m;
}per[51];
int main()
{
int i,T,j,k,cnt[100001],dic[100001];
while(cin>>T&&T>=0)
{
int sum=0;
for(int p=0;p<T;p++)
{cin>>per[p].v>>per[p].m;sum+=per[p].v*per[p].m;}
int M=sum/2;
for(int p=0;p<=M;p++)
{cnt[p]=0;dic[p]=0;}
for(int q=0;q<=per[0].m*per[0].v;q+=per[0].v)
{
cnt[q]=1;
}
for(i=2;i<=T;i++)
{
for(j=0;j<=M;j++)
for(k=0;(k+j<=M)&&(k<=per[i-1].v*per[i-1].m);k+=per[i-1].v)
{
dic[j+k]+=cnt[j];
}
for(int h=0;h<=M;h++)
{
cnt[h]=dic[h];
dic[h]=0;
}
}
int x=M;
while(!cnt[M])
{
M--;
}
cout<<sum-M<<" "<<M<<endl;
}
return 0;
}
杭电 HDU ACM 1171 Big Event in HDU
原文地址:http://blog.csdn.net/lsgqjh/article/details/45273977