hdu 2082 找单词

来源:http://acm.hdu.edu.cn/showproblem.php?pid=2082

 

qscvideo讲解:https://www.bilibili.com/video/av4356817/

母函数  也就是所谓的生成函数

通过(1+x)(1+x+x2)将排列组合问题 换成求多项式系数的问题? 大概是这样子的吧

#include<bits/stdc++.h>
using namespace std;
int s[30],s1[60],s2[60];

void init()
{
    for(int i=0;i<60;i++)
        s1[i] = s2[i] =0;

}

int main ()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        init();
        for(int i=1;i<=26;i++)
            scanf("%d",&s[i]);

        s1[0] = 1;//因为不论多少1相乘都是1
        for(int i=1;i<=26;i++)
        {
            for(int j=0;j<=50;j++)
            {
                for(int k=0;k<=s[i] && k*i+j<=50;k++)
                {
                    s2[k*i+j] += s1[j];//s1存储每个多项式相乘的结果,s2存储每次相乘的中间结果
                }
            }
            for(int j=0;j<=50;j++)
            {
                s1[j] = s2[j];
                s2[j] = 0;
            }
        }
        int res =0;
        for(int i=1;i<=50;i++)
            res+=s1[i];
        printf("%d\n",res);
    }
}

 

 

 

 

posted @ 2017-08-14 12:56  Draymonder  阅读(178)  评论(0编辑  收藏  举报