这个题真的不太会啊= =是看了别人的代码。。。感说得还比较好。。。我自己是dfs过了。
转载出处:http://blog.csdn.net/lyy289065406/article/details/6661449
下面是我的代码:
#include<cstdio>
#include<cstring>
int a[6],sum,i,ans,OK;
void dfs(int step)
{
/* printf("%d %d\n",ans,step);
for(i=0;i<6;++i)
printf("%d ",a[i]);
printf("\n");*/
if(ans==sum) OK=1;
if(OK||step>5) return ;
int m=a[step],j;
dfs(step+1);
for(j=1;j<=m;++j)
{
a[step]=a[step]-j;
ans+=j*(step+1);
dfs(step+1);
ans-=j*(step+1);
a[step]=m;
}
}
int main()
{
// freopen("data.in","r",stdin);
// freopen("data.out","w",stdout);
int t=1;
while(scanf("%d%d%d%d%d%d",&a[0],&a[1],&a[2],&a[3],&a[4],&a[5]), a[0] || a[1] || a[2] || a[3] || a[4] || a[5])
{
sum=0;
for(i=0;i<6;++i)
if(a[i]>60)
if(a[i]%2) a[i]=61;
else a[i]=60;
for(i=0;i<6;++i)
sum+=a[i]*(i+1);
if(sum%2)
{
printf("Collection #%d:\nCan't be divided.\n\n",t++);
}
else
{
sum/=2;
ans=0;
OK=0;
dfs(0);
OK?printf("Collection #%d:\nCan be divided.\n\n",t++):printf("Collection #%d:\nCan't be divided.\n\n",t++);
}
}
return 0;
}