#include<stdio.h>
#include<string.h>
#define maxn 100005
int dp[maxn],a[maxn],w[maxn];
int main()
{
int i,j,num,sum,t,cnt(1);
while(~scanf("%d%d%d%d%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5],&a[6],&a[7],&a[8],&a[9]))
{
memset(dp,0,sizeof(dp));
memset(w,0,sizeof(w));
sum=0;num=0;
for(i=0;i<10;i++)
sum=sum+(i+1)*a[i];//总价值
if(sum==0)
break;//必要 ,因为全输入0并不是ctrl和C组合键
if(sum%2==1)
{
printf("#%d:Can't be divided.\n\n",cnt++);
continue;
}
sum=sum/2;
for(i=0;i<10;i++)
{
if(a[i]==0)
{
continue;
}
t=1;
while(a[i]-t>0)/*二进制压缩为一般01背包,想想为什么不会是if语句*/
{
w[num++]=t*(i+1);
a[i]=a[i]-t;
t=t*2;
}
w[num++]=a[i]*(i+1);
}
for(i=0;i<num;i++)
{
for(j=sum;j>=w[i];j--)
{
if(dp[j]<dp[j-w[i]]+w[i])
dp[j]=dp[j-w[i]]+w[i];
}
}
if(dp[sum]!=sum)
{
printf("#%d:Can't be divided.\n\n",cnt++);
}
else
{
printf("#%d:Can be divided.\n\n",cnt++);
}
}
return 0;
}


  


作者:​​火星十一郎​

本文版权归作者火星十一郎所有,欢迎转载和商用,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.