#include<stdio.h>
#include<string.h>
int a[7],f[120100],tot;
int dp()
{
int i,ans,k,num,j;
if(tot&1)
return 0;
ans=tot/2;
memset(f,0,sizeof(f));
f[0]=1;
for(i=1;i<=6;i++)
{
k=1;
num=a[i];
while(k<=num)
{
num-=k;
for(j=tot;j>=k*i;j--)
if(f[j-k*i])
{
f[j]=1;
if(j==ans)
return 1;
}
k*=2;
}
if(num)
for(j=tot;j>=num*i;j--)
if(f[j-num*i])
{
f[j]=1;
if(ans==j)
return 1;
}
}
return 0;
}
int main()
{
int cnt,i;
cnt=1;
while(1)
{
tot=0;
for(i=1;i<=6;i++)
{
scanf("%d",&a[i]);
tot+=a[i]*i;
}
if(a[1]==0&&a[2]==0&&a[3]==0&&a[4]==0&&a[5]==0&&a[6]==0)
break;
if(dp())
printf("Collection #%d:\nCan be divided.\n\n",cnt++);
else
printf("Collection #%d:\nCan't be divided.\n\n",cnt++);
}
}
HDU 1059
最新推荐文章于 2021-07-13 16:16:53 发布