HDU 1028 Ignatius and the Princess III (母函数的应用)

Ignatius and the Princess III(传送门)
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Problem Description
“Well, it seems the first problem is too easy. I will let you know how foolish you are later.” feng5166 says.

“The second problem is, given an positive integer N, we define an equation like this:
N=a[1]+a[2]+a[3]+…+a[m];
a[i]>0,1<=m<=N;
My question is how many different equations you can find for a given N.
For example, assume N is 4, we can find:
4 = 4;
4 = 3 + 1;
4 = 2 + 2;
4 = 2 + 1 + 1;
4 = 1 + 1 + 1 + 1;
so the result is 5 when N is 4. Note that “4 = 3 + 1” and “4 = 1 + 3” is the same in this problem. Now, you do it!”

Input
The input contains several test cases. Each test case contains a positive integer N(1<=N<=120) which is mentioned above. The input is terminated by the end of file.

Output
For each test case, you have to output a line contains an integer P which indicate the different equations you have found.

Sample Input
4
10
20

Sample Output
5
42
627

ps: 整数划分的问题。

#include<iostream>
using namespace std;
const int _max = 10001;
int c1[_max], c2[_max];// c1是保存各项可以组合的数目,c2是中间量,保存每一次的情况
int main()
{
    int nNum;
    int i, j, k;
    while(cin>>nNum)
    {
        for(i = 0; i <= nNum; i++)
        {
            c1[i] = 1; //对于第一项多项式的各项因式
            c2[i] = 0;
        }
        for(i = 2; i <= nNum; i++)
        {//从第二项开始
            //模拟
            for(j = 0; j <= nNum; j++)//j 指向已经算出来的因式的指数,c2[j] 存放的是指数为 j 的项的系数
                for(k = 0; k + j <= nNum; k += i)
                {//k 代表下一个因式的指数,因式的指数是隔 i 递增的。
                // 另外,因式中,指数为 k 的项的系数为 1
                    c2[j+k] += c1[j];//对于 c1[j] * x^j * x^k = c1[j] * x^(j+k)
                                //就把 x^(j+k) 的系数 c1[j] 加到存放当前答案的数组 c2里面
                }
            for(j = 0; j <= nNum; ++j)
            {//把数组 c2 元素滚动到 数组 c1 去,以便递归进行乘法运算;另外,清空数组 c2
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
        cout<<c1[nNum]<<endl;
    }
    return 0;
}

母函数学习可以参考下面的几篇文章:
母函数(Generating function)详解 — TankyWoo
用母函数的思路解释母函数的代码
母函数简介

微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值