关闭

HDU_1398_Square Coins

225人阅读 评论(0) 收藏 举报


    母函数的典型题题目。

    题意:有面值为(1,2^2,3^2,4^2, ……17^2)元的硬币,要求付n元钱,问有几种付法。

    此题分析:构造G(x)=(1+x+x^2+x^3+x^4+…)(1+x^4+x^8+x^12+…)(1+x^9+x^18+x^27+…)……这样一个母函数,所求即为x^n的系数。(其中x表示面值,1表示不选,次方数表示面值的权值)。

    母函数定义:对于序列a0,a1,a2,……构造函数:        
                       G(x)=a0 + a1x + a2x^2+……
                称G(x)是序列a0,a1,a2,……的母函数。
代码如下:

#include<iostream>

using namespace std;

#define MAX 310
int sum[MAX],v[MAX];

int main(){
    int i,j,k;
    int n;
    while(cin>>n && n){
        for(i=0; i<=n; i++){
            sum[i] = 1;     //第一种面值无论n等于几,都只有一种方案
            v[i] = 0;
        }
        for(i=2; i<=17; i++){      //表示第几种面值
            for(j=0; j<=n; j++){      //表示这几种面值选哪种
                for(k=0; k+j<=n; k+=i*i){              
                                //只要面值数相加不超过n,就符合题意,加到相应的地方
                    v[k+j] += sum[j];
                }
            }
            for(j=0; j<=n; j++){
                sum[j] = v[j];
                v[j] = 0;
            }
        }
        cout<<sum[n]<<endl;
    }
    return 0;
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:97538次
    • 积分:2334
    • 等级:
    • 排名:第16597名
    • 原创:142篇
    • 转载:0篇
    • 译文:0篇
    • 评论:2条
    文章分类
    最新评论