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

posted @ 2010-10-15 15:05  菜到不得鸟  阅读(136)  评论(0)    收藏  举报