现在的位置: 首页 > 综合 > 正文

HDU1398(母函数)

2019年09月22日 ⁄ 综合 ⁄ 共 632字 ⁄ 字号 评论关闭

题目大意:一个数n,可以用1,2^2,3^2,4^2……17^2,组合,有多少种组合;原题:点击打开链接

题目解析:运用母函数模板,简单搞定;形式:(1+x^4+....+x^(4*n))(1+x^9+....X^(9*n))……(1+x^17+……+x^(17*n))

错误分析:第三个循环k,应该为k+j<=n;不是k<n,否则会造成segment fault;

#include<stdio.h>
#include<iostream>
using namespace std;
#define M 305
int n;
int  a1[M],a2[M] ;
int init()
{
    int i,j,k;
    scanf("%d",&n);
    if(n==0)return 0;
    for(i=0;i<=n;i++)//对于每个数都可以只由1组合而成,所以每个数都至少有一种组合;即:表达式:(1+x+.....+x^n)
    {
        a1[i]=1;
        a2[i]=0;
    }
    for(i=2;i<=17;i++)//然后就是4,9,16……,i控制第几个表达式
    {
        for(j=0;j<=n;++j)//j表示第i个表达式中第j个数
        for(k=0;k+j<=n;k+=i*i)//k表示第j个数的指数
        {
            a2[j+k]+=a1[j];
        }
        for(j=0;j<=n;++j)
        {
            a1[j]=a2[j];
            a2[j]=0;
        }
       }
       printf("%d\n",a1[n]);
       return 1;
}
int main()
{

   while(init());
   return 0;
}

抱歉!评论已关闭.