母函数入门【模板】

正整数拆分

hdu1028

解:

对于正整数 $n$ 的拆分,其母函数为

$$f(x) = (1+x+x^2+...)(1+x^2+x^4+...)(1+x^3+x^6+x^9+...)...$$

答案就是多项式展开后 $x^n$ 项的系数。

Code:

//其实就是模拟,从前往后一一合并

#include<bits/stdc++.h>
using namespace std;

const int _max = 10001;
int c1[_max], c2[_max];    //c1存放前面项计算出来的结果,c2存放中间结果
int n;

int main()
{
    while(scanf("%d", &n) == 1)
    {
        for(int i=0; i<=n; ++i)
        {
            c1[i] = 1;  //第一项系数全1
            c2[i] = 0;  //中间变量初始化为0
        }
        for(int i=2; i<=n; ++i)   // 最多涉及前n项
        {

            for(int j=0; j<=n; ++j)   // 枚举c1中的项
                for(int k=0; k+j<=n; k+=i)  // 枚举第i个大括号中的项
                {
                    c2[j+k] += c1[j];
                }
            for(int j=0; j<=n; ++j)     //转移到c1
            {
                c1[j] = c2[j];
                c2[j] = 0;
            }
        }
        printf("%d\n", c1[n]);
    }
    return 0;
}

参考链接:Tanky Woo——http://www.wutianqi.com/blog/596.html

原文地址:https://www.cnblogs.com/lfri/p/11565435.html

时间: 2024-11-09 07:58:11

母函数入门【模板】的相关文章

母函数 入门 + 模板

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

母函数入门+模板(转)

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

HDU1028Ignatius and the Princess III母函数入门

这个题也可以用递归加记忆化搜索来A,不过由于这题比较简单,所以用来做母函数的入门题比较合适 以展开后的x4为例,其系数为4,即4拆分成1.2.3之和的拆分数为4: 即 :4=1+1+1+1=1+1+2=1+3=2+2 这里再引出两个概念整数拆分和拆分数: #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <climits> #in

HDU 2082 找单词 (母函数入门)

[题目链接]click here~~ [题目大意] 假设有x1个字母A, x2个字母B,..... x26个字母Z,同时假设字母A的价值为1,字母B的价值为2,..... 字母Z的价值为26.那么,对于给定的字母,可以找到多少价值<=50的单词呢?单词的价值就是组成一个单词的所有字母的价值之和,比如,单词ACM的价值是1+3+14=18,单词HDU的价值是8+4+21=33.(组成的单词与排列顺序无关,比如ACM与CMA认为是同一个单词). Input 输入首先是一个整数N,代表测试实例的个数.

HDU2063(二分匹配入门模板题)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9322    Accepted Submission(s): 4108 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求

HDU 1251 统计难题(字典树入门模板题 很重要)

统计难题 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131070/65535 K (Java/Others)Total Submission(s): 56382    Accepted Submission(s): 19709 Problem Description Ignatius最近遇到一个难题,老师交给他很多单词(只有小写字母组成,不会有重复的单词出现),现在老师要他统计出以某个字符串为前缀的单词数量(单词本身也是自己的

HDU 2222 Keywords Search (AC自动机入门 模板)

AC自动机入门 Aho-Corasick automaton,该算法在1975年产生于贝尔实验室,是著名的多模匹配算法之一.学习AC自动机之前得先有Trie树和KMP模式匹配算法的基础. AC自动机算法分为3步:1.构造一棵tire树  2.构造失败指针  3.进行模式匹配 AC自动机的优化:Trie图 Keywords Search Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other

计算几何入门模板(持续更新)

我也算是刚入门计算几何吧,想写一篇入门的模板,让那些和我一样刚入门的人都能看懂就好. 首先要有一些理论知识,这可以百度,我就不多说了,通过百度,你要知道: ①叉积可以判断3个点共线,还可以判断2个点构成直线,第3个点在直线的左边还是右边. ②判断两条线段相交要有2个条件,一个是矩形的什么定理(名字太长,忘了)另一个就是4个点的叉积相乘小于0(也就是异号) 之后就可以看下我收集的简单的模板了. #include <map> #include <set> #include <li

生成函数(母函数)入门详解

本文章从以上两位大佬的博客参考而来!再次感谢! 母函数,又称生成函数,是ACM竞赛中经常使用的一种解题算法,常用来解决组合方面的题目. 在数学中,某个序列的母函数(Generating function,又称生成函数)是一种形式幂级数,其每一项的系数可以提供 关于这个序列的信息.使用母函数解决问题的方法称为母函数方法. 母函数可分为很多种,包括普通母函数.指数母函数.L级数.贝尔级数和狄利克雷级数.对每个序列都可以写出以 上每个类型的一个母函数.构造母函数的目的一般是为了解决某个特定的问题,因此