hdu 1284 钱币兑换问题

hdu 1284 钱币兑换问题 母函数
//hdu 1284 母函数



//              1分的             2分的             3分的

//母函数计算:(1+x+x^2+x^3+...)*(1+x^2+x^4+...)*(1+x^3+x^6+...)

//n 分钱要分解的方法则为 多项式相乘后 指数为n 的系数



#include <stdio.h>

#include <string.h>



#define N 35000



int ans[N], mul[N];



int main()

{

    for(int i = 0; i < N; ++i)

        ans[i] = 1;  //全用1分组成的方法都只有1种



    for(int i = 2; i <= 3; ++i)

    {

        for(int j = 0; j < N; ++j)

        {                                   //系数都为1

            for(int k = 0; j+k < N; k += i) //( 1 + x^k + x^(k+i) + x^(k+2i) + ... )

            {   //指数分别为j 和k 的多项式相乘 得到指数为 j+k项,所以第j项乘以第k项

                mul[j+k] += ans[j]; // 得到 j+k项 的系数为 j项的加上原本 j+k项的系数

            }

        }

        for(int j = 0; j < N; ++j)

        {

            ans[j] = mul[j];   //把系数保存到 ans数组里

            mul[j] = 0;        //初始化

        }

    }

    int n;

    while(scanf("%d", &n) != EOF)

    {

        printf("%d\n", ans[n]);

    }

    return 0;

}

 

你可能感兴趣的:(HDU)