母函数

"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!"

InputThe 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. 
OutputFor 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

代码:
/*  gyt
       Live up to every day            */

#include<cstdio>
#include<cmath>
#include<iostream>
#include<algorithm>
#include<vector>
#include<stack>
#include<cstring>`
#include<queue>
#include<set>
#include<string>
#include<map>
#include <time.h>
#define PI acos(-1)
using namespace std;
typedef long long ll;
typedef double db;
const int maxn = 10000+5;
const ll maxm = 1e7;
const ll mod = 1e9 + 7;
const int INF = 0x3f3f3f;
const ll inf = 1e15 + 5;
const db eps = 1e-9;
int c1[maxn], c2[maxn];

void solve() {
    int n;
    while(scanf("%d", &n)!=EOF) {
        for (int i=0; i<=n; i++) {
            c1[i]=1, c2[i]=0;
        }
        for (int i=2; i<=n; i++) {
            for (int j=0; j<=n; j++) {
                for (int k=0; j+k<=n; k+=i) {
                    c2[j+k]+=c1[j];
                }
            }
            for (int j=0; j<=n; j++) {
                c1[j]=c2[j];
                c2[j]=0;
            }
        }
        printf("%d\n", c1[n]);
    }
}
int main() {
    int t = 1;
    //freopen("in.txt", "r", stdin);
    //scanf("%d", &t);
    while(t--)
        solve();
    return 0;
}
时间: 2024-10-24 02:48:33

母函数的相关文章

HDU 2189 悼念512汶川大地震遇难同胞——来生一起走(母函数或完全背包)

悼念512汶川大地震遇难同胞--来生一起走 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3773    Accepted Submission(s): 1913 Problem Description 妈妈你别哭泪光照亮不了我们的路让我们自己慢慢的走 妈妈我会记住你和爸爸的模样记住我们的约定来生一起走 上面这首诗节选自一位诗人纪念遇难

HDU 2065 红色病毒 指数型母函数+泰勒公式

医学界发现的新病毒因其蔓延速度和Internet上传播的"红色病毒"不相上下,被称为"红色病毒",经研究发现,该病毒及其变种的DNA的一条单链中,胞嘧啶,腺嘧啶均是成对出现的. 现在有一长度为N的字符串,满足一下条件: (1) 字符串仅由A,B,C,D四个字母组成; (2) A出现偶数次(也可以不出现); (3) C出现偶数次(也可以不出现); 计算满足条件的字符串个数. 当N=2时,所有满足条件的字符串有如下6个:BB,BD,DB,DD,AA,CC. 由于这个数据

bzoj 3028: 食物 -- 母函数

3028: 食物 Time Limit: 3 Sec  Memory Limit: 128 MB Description 明明这次又要出去旅游了,和上次不同的是,他这次要去宇宙探险! 我们暂且不讨论他有多么NC,他又幻想了他应该带一些什么东西.理所当然的,你当然要帮他计算携带N件物品的方案数. 他这次又准备带一些受欢迎的食物,如:蜜桃多啦,鸡块啦,承德汉堡等等 当然,他又有一些稀奇古怪的限制: 每种食物的限制如下: 承德汉堡:偶数个 可乐:0个或1个 鸡腿:0个,1个或2个 蜜桃多:奇数个 鸡块

母函数的基础内容

母関数の原初 看了论文和数学书后晕乎乎的 为了理解定义,透彻地理解,这篇博文仅限于一些基础公式和小问题(开胃菜?) 零.预备知识 呐,假装知道了母函数的所有知识,看看一些不加证明的公式 普通的母函数 1. 2.令g(n)为母函数第n项的系数,由插板法可得 3.最终结论 一.例题一 from http://www.wutianqi.com/ 我们有1g.2g.3g.4g砝码各一枚,问可称出哪几种重量?每种重量含有那些方案? The First kiss 假设x表示砝码(物品),x的指数表示单个砝码

HDU4609 3-idiots(母函数 + FFT)

题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4609 Description King OMeGa catched three men who had been streaking in the street. Looking as idiots though, the three men insisted that it was a kind of performance art, and begged the king to fre

母函数入门+模板(转)

在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供关于这个序列的信息.使用母函数解决问题的方法称为母函数方法. 母函数可分为很多种,包括普通母函数.指数母函数.L级数.贝尔级数和狄利克雷级数.对每个序列都可以写出以上每个类型的一个母函数.构造母函数的目的一般是为了解决某个特定的问题,因此选用何种母函数视乎序列本身的特性和问题的类型. 这里先给出两句话,不懂的可以等看完这篇文章再回过头来看: 1.“把组合问题的加法法则和幂级数

hdu 1028 整数划分 (母函数)

假如输入44 = 4;4 = 3 + 1;4 = 2 + 2;4 = 2 + 1 + 1;4 = 1 + 1 + 1 + 1;一共5种 假如输入3 用母函数的方法就是写成(1+X+X2+X3)(1+X2)(1+X3) 展开后 求X3的系数 假如输入n就是(1+X+X2+X3+X4....)(1+X2+X4+X6..)(1+X3+X6...)(....) Sample Input41020 Sample Output542627 1 # include <iostream> 2 # includ

指数型母函数理解

普通型母函数主要是求组合的方案数,而指数型母函数则是求多重排列数. 例如:设有8个元素,a1重复3次,a2重复2次,a3重复3次.从中取出r个集合,求其组合数. 推荐:http://www.wutianqi.com/?p=2644 对于代码的推荐:http://blog.csdn.net/a342374071/article/details/6537960 以hdu 1521为例: 有n种物品,并且知道每种物品的数量.要求从中选出m件物品的排列数.例如有两种物品A,B,并且数量都是1,从中选2件

ZOJ 题目2734 Exchange Cards(DFS 去重OR 母函数)

Exchange Cards Time Limit: 2 Seconds      Memory Limit: 65536 KB As a basketball fan, Mike is also fond of collecting basketball player cards. But as a student, he can not always get the money to buy new cards, so sometimes he will exchange with his

HDOJ 找单词 2082【母函数】

找单词 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 5024    Accepted Submission(s): 3575 Problem Description 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找