您的位置:首页 > 其它

Ignatius and the Princess III(母函数)

2015-10-20 15:00 190 查看
题目地址

题目大意:给出数n,求由比数n相加的和为n的加法的种类,每个数可用多次,交换顺序为同一种加法

解题思路:母函数模板

G( x ) = (1 + x + x^2 +····) * ( 1 + x^2 + x^4 + ····) * ( 1 + x^3 + x^6+....)*......

#include <bits/stdc++.h>

using namespace std;

const int maxn = 10001;

int c1[maxn],c2[maxn];// c1是保存可以相加构成数n的种数 ,c2是中间量,保存每一次的情况

int main()
{
int nNum;
while(scanf("%d",&nNum) != EOF)
{
for(int i=0; i<=nNum; i++)   //初始化数n的构成有1种(第一条表达式的初始化)
{
c1[i] = 1;
c2[i] = 0;
}
for(int i=2; i<=nNum; i++)//对于第2个表达式到第n个表达式
{
for(int j=0; j<=nNum; j++)//对于第j个变量(x^j)
{
for(int k=0; k+j<=nNum; k+=i)  //对于第i个表达式的每个变量
{
c2[j+k] += c1[j];
}
}
for(int j=0; j<=nNum; j++)//对于每条表达式从0开始
{
c1[j] = c2[j];
c2[j] = 0;
}
}
printf("%d\n",c1[nNum]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: