hdu 2082 找单词(母函数)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#define MAXN 51
int c1[MAXN], c2[MAXN];
int num[27];
void genfun(const int n)
{
memset(c1, 0, sizeof(c1));
memset(c2, 0, sizeof(c2));
int i, j, k;
c1[0] = 1;
for(i = 1; i <= 26; i++)
{
for(j = 0; j <= n; j++)
{
for(k = 0; (k + j <= n) && (k <= num[i] * i); k += i)
{
c2[k + j] += c1[j];
// printf("j=%d k=%d c2[j+k]=%d\n", j, k, c2[j+k]);
}
}
for(j = 0; j <= n; j++)
{
c1[j] = c2[j];
c2[j] = 0;
}
}
}
int main()
{
// freopen("indata.txt", "r", stdin);
int cas;
scanf("%d", &cas);
while(cas--)
{
int i, sum = 0;
for(i = 1; i <= 26; i++)
{
scanf("%d", &num[i]);
sum += num[i] * i;
}
if(sum > 50) sum = 50;
genfun(sum);
int cnt = 0;
for(i = 1; i <= sum; i++) cnt += c1[i];
printf("%d\n", cnt);
}
return 0;
}
浙公网安备 33010602011771号