• HDU 1398 Square Coins


    HDU_1398

        这个题目可以用dp去解,用f[i][j]表示取到i*i这种硬币时面值为j的方案数。

        为了练一下生成函数,我就用生成函数的思路写了一下,构造生成函数G(x)=(1+x+x^2+…)(1+x^4+x^8+…)…(1+x^289+x^578+…),然后每次查询相当于查询x^n的系数是多少。

    #include<stdio.h>
    #include<string.h>
    #define MAXD 20
    #define MAXM 310
    int f[MAXD][MAXM], N;
    void prepare()
    {
    int i, j, k;
    memset(f, 0, sizeof(f));
    f[0][0] = 1;
    for(i = 1; i <= 17; i ++)
    for(j = 0; j <= 300; j += i * i)
    for(k = 0; k + j <= 300; k ++)
    f[i][k + j] += f[i - 1][k];
    }
    int main()
    {
    prepare();
    for(;;)
    {
    scanf("%d", &N);
    if(!N)
    break;
    printf("%d\n", f[17][N]);
    }
    return 0;
    }


  • 相关阅读:
    导航
    占位
    django(一)
    进程与线程
    网络编程
    反射 单例模式
    面向对象及命名空间
    logging,包
    模块(二)os hashlib
    装饰器&递归
  • 原文地址:https://www.cnblogs.com/staginner/p/2381167.html
Copyright © 2020-2023  润新知