Time Limit: 1000MS | Memory Limit: 10000K | |
Total Submissions: 55117 | Accepted: 14112 |
Description
Input
The last line of the input file will be "0 0 0 0 0 0"; do not process this line.
Output
Output a blank line after each test case.
Sample Input
1 0 1 2 0 0 1 0 0 0 1 1 0 0 0 0 0 0
Sample Output
Collection #1: Can't be divided. Collection #2: Can be divided.
Source
/*poj1014 AC*/
#include<cstdio>
long sum,v,tot,i;
bool f[100000];
long num[7];
void Zeroonepack(int weight)
{
for (long j=v;j>=weight;j--)
if (f[j-weight]) f[j]=true;
}
void Multiplepack(int num,int weight)
{
long k=1;
if (num==1) { Zeroonepack(weight); return; }
while (k<num)
{
Zeroonepack(k*weight);
num-=k;
k*=2;
}
if (num) Zeroonepack((num)*weight); //NUM!
}
int main()
{
while (1) {
tot++;
bool b=false;
sum=0;
for (i=1;i<=6;i++)
{
scanf("%ld",&num[i]);
if (num[i]) b=true;
sum+=i*num[i];
}
if (!b) break;
if (sum%2) {
printf("Collection #%ld:\nCan't be divided.\n\n",tot);
continue;
}
v=sum/2;
for (i=1;i<=v;i++) f[i]=false;
f[0]=true;
for (i=1;i<=6;i++)
Multiplepack(num[i],i);
if (f[v]) printf("Collection #%ld:\nCan be divided.\n\n",tot);
else printf("Collection #%ld:\nCan't be divided.\n\n",tot);
}
}