码迷,mamicode.com
首页 > 其他好文 > 详细

hdu1398 Square Coins(母函数)

时间:2015-02-05 18:01:29      阅读:139      评论:0      收藏:0      [点我收藏+]

标签:

题目类似于整数拆分,很明显用母函数来做。

母函数的写法基本固定,根据具体每项乘式的不同做出一些修改就行了。它的思路是从第一个括号开始,一个括号一个括号的乘开,用c1数组保存之前已经乘开的系数,即c1[j]表示在之前已经乘开过的那些括号处理后x的j次方的系数,c2数组是一个临时更新的统计数组,每处理一个括号就更新一遍c1数组即可。

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<algorithm>
#include<stack>
#include<queue>
#include<cctype>
#include<sstream>
using namespace std;
#define pii pair<int,int>
#define LL long long int
const double eps=1e-10;
const int INF=1000000000;
const int maxn=300+10;
int c1[maxn],c2[maxn],n;
int main()
{
    //freopen("in1.txt","r",stdin);
    //freopen("out.txt","w",stdout);
    for(int i=0;i<maxn;i++)
    {
        c1[i]=1;
        c2[i]=0;
    }//第一个括号已处理好

    for(int i=2;i<=17;i++)//顺次乘进后面的每个括号
    {
        for(int j=0;j<maxn;j++)//c1之前存储的每个j的值
        {
            for(int k=0;k+j<maxn;k+=i*i)//本括号内的指数
            {
                c2[k+j]+=c1[j];
            }
        }
        for(int j=0;j<maxn;j++)//更新存储的值
        {
            c1[j]=c2[j];
            c2[j]=0;
        }
    }
    while(scanf("%d",&n)==1&&n)
    {
        printf("%d\n",c1[n]);
    }
    return 0;
}

 

hdu1398 Square Coins(母函数)

标签:

原文地址:http://www.cnblogs.com/zywscq/p/4275221.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!