#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; }