这道题和poj1276Cash Machine几乎完全一样……
#include<stdio.h>
#include<string.h>
int main()
{
int num[7];
int sum;
int dp[80001]={0};
int i, j, k, temp;
int Case=0;
while(1)
{
Case++;
sum=0;
for(i=1; i<=6; i++)
{
scanf("%d", num+i);
sum+=num[i]*i;
}
if( !sum ) break;
if( sum%2==0 )
{
memset(dp, 0, sizeof(dp));
sum/=2;
for(i=1; i<=6; i++)
{
for(k=1; k<=num[i]; k<<=1)
{
num[i]-=k;
temp=k*i;
for(j=sum; j>=temp; j--)
{
if( dp[j]<dp[j-temp]+temp)
dp[j]=dp[j-temp]+temp;
}
}
if( num[i]>0 )
{
temp=num[i]*i;
for(j=sum; j>=temp; j--)
{
if( dp[j]<dp[j-temp]+temp)
dp[j]=dp[j-temp]+temp;
}
}
}
}
if( dp[sum]==sum )
printf("Collection #%d:\nCan be divided.\n\n", Case);
else
printf("Collection #%d:\nCan't be divided.\n\n", Case);
}
}