标签:母函数
1 0 1 2 0 0 1 0 0 0 1 1 0 0 0 0 0 0
Collection #1: Can‘t be divided. Collection #2: Can be divided.
/* 母函数 */
#include <stdio.h>
#include <string.h>
int c1[120000], c2[120000];
int main()
{
int coin[7];
int i, j, k, temp = 1;
while(1)
{
int sum = 0;
for(i = 1; i <= 6; i ++)
{
scanf("%d", &coin[i]);
sum += (coin[i]%60)*i;
}
if(sum == 0)
break;
printf("Collection #%d:\n", temp++);
if(sum & 1)
{
printf("Can't be divided.\n\n"); continue;
}
sum >>=1;
memset(c1, 0, sizeof(c1));
memset(c2, 0, sizeof(c2));
c1[0] = 1;
for(i = 1; i <= sum&&i <= coin[i]; i ++)
{
c1[i] = 1;
}
for(i = 2; i <= 6; i ++)
{
if(coin[i] == 0) continue;
for(j = 0; j <= sum; j ++)
{
for(k = 0; k + j <= sum&&k <= coin[i]*i; k+=i)
{
c2[j+k] += c1[j];
}
}
for(j = 0; j <= sum; j ++)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
if(c1[sum]) printf("Can be divided.\n\n");
else printf("Can't be divided.\n\n");
}
return 0;
}标签:母函数
原文地址:http://blog.csdn.net/holyang_1013197377/article/details/42178247