• HDU 2082 找单词 --- 母函数


    HDU 2082 找单词

    起码通过这题,知道了母函数是什么东西,值得一做。

    /* HDU 2082 找单词 --- 母函数 */
    #include <cstdio>
    #include <cstring>
    
    const int N = 50;
    int num[30], c1[N + 10], c2[N + 10];
    
    int main()
    {
    #ifdef _LOCAL
        freopen("D:\input.txt", "r", stdin); //文件流重定向;
        //freopen("D:\output.txt", "w", stdout); 
    #endif
    
        int t;
        scanf("%d", &t);
        while (t--){
            for (int i = 1; i <= 26; ++i){
                scanf("%d", num + i);
            }
            memset(c1, 0, sizeof c1); //c1保存已经算得的各指数的系数
            memset(c2, 0, sizeof c2); //c2用于保存c1*一个新的多项式后的系数,乘完赋值给c1并清零
    
            c1[0] = 1; //X^0去乘后面的多项式 
            //(X^0)*(X^0+X^1+X^2+X^3+...)*(X^0+X^2+X^4+X^6+...)*...*(X^0+X^26+X^52+X^78...)
            //目的是算这个式子乘积的各个指数的系数, 题目要求只要小于等于50的即可
            for (int i = 1; i <= 26; ++i){
                //要乘以26个多项式,每个多项式有num[i]+1项
                for (int j = 0; j <= N; ++j){
                    for (int k = 0; k <= num[i] && (j + k*i <= N); ++k){
                        //相当于使用了k个指数为i的式子的乘积(因此指数为k*i)
                        //例:i=2时,单个指数为i,共有num[i]个指数为i的式子,我们可以使用k个(k=0,1,2...num)
                        //这样得到的要乘以原式子的多项式指数分别是0,2,4,6...num*2;
    
                        //用这个新的多项式乘以原来已经取得的结果 指数为k*i
                        c2[j + k*i] += c1[j]; //新结果的指数是在原有指数的基础上加上新乘的多项式;是每个位置i都要乘一遍所有能取得的多项式(因此是两层循环)
                    }//for(k)
                }//for(j)
                for (int j = 0; j <= N; ++j){
                    c1[j] = c2[j];
                    c2[j] = 0;
                }
            }//for(i)
            int cnt = 0;
            for (int i = 1; i <= N; ++i){
                cnt += c1[i];
            }
            printf("%d
    ", cnt);
        }//while(t)
    
        return 0;
    }
    View Code
  • 相关阅读:
    Codeforces 220C
    Codeforces 697D
    HDU 4417
    Codeforces 396C
    Codeforces 246C
    HDU 6333
    HDU 3389
    总结:树上启发式合并
    HDU 6319
    Codeforces 1009G
  • 原文地址:https://www.cnblogs.com/tommychok/p/5079449.html
Copyright © 2020-2023  润新知