虽然我很想自己写母函数讲解。。。但是最近事情太多了,就贴个很入门的讲解吧给出一个经典的模板A了这个题

http://blog.csdn.net/vsooda/article/details/7975485

 //母函数
//G(x) = (1 + x^1 + x^2..+x^n)(1 + x^2 + x^4 + x^6 + ...)(1 + x^3 + x^6 +..)(..)(1 + x^n)
//第一个表达式(1 + x^1 + x^2..+x^n)中 x的指数代表【解中'1'的出现次数】 比如x^2 = x^(1 * 2) 这是'1'出现了两次 x^3 = x^(1 * 3) '1'出现3次
//相似的 第二个表达式(1 + x^2 + x^4 + x^6 + ...) x^4 = x^(2 * 2) '2'出现两次 x^6 = x^(2 * 3) '1'出现3次
//...以此类推 【* 1(0次项) 是代表该数字出现次数为0】 //乘法原理的应用:每一个表达式 表示的都是 某个变量的所有取值【比如第一个表达式 表示'1'可以取的值(即n拆分后'1'出现的次数)可以为 {0,1,2...n}】
//每个变量的所有取值的乘积 就是问题的所有的解(在本问题中表现为‘和’)
//例子:4 = 2 + 1 + 1就是 x^(1 * 2)【'1'出现2次】
// * x^(2 * 1)【'2'出现1次】
// * x^(3 * 0)【'3'出现0次】
// * x^(4 * 0)【..】
// 的结果
//上述4个分式乘起来等于 1 * (x^4) 代表 4的一个拆分解
//所以 G(x)展开后 其中x^n的系数就是 n的拆分解个数
# include <stdio.h> int main()
{
int C1[], C2[], n; while(scanf("%d", &n) != EOF)
{
for(int i = ; i <= n; i++)//初始化 第一个表达式 目前所有指数项的系数都为1
{
C1[i] = ;
C2[i] = ;
} for(int i = ; i <= n; i++)//第2至第n个表达式
{
for(int j = ; j <= n; j++)//C1为前i-1个表达式累乘后各个指数项的系数
{
for(int k = ; j + k <= n; k += i)//k为第i个表达式每个项的指数 第一项为1【即x^(i * 0)】(指数k=0),第二项为x^(i * 1)(指数为k=i), 第三项为x^(i * 2)... 所以k的步长为i
{
C2[j + k] += C1[j];//(ax^j)*(x^k) = ax^(j+k) -> C2[j+k] += a 【第i个表达式每一项的系数都为1; a为C1[j]的值(x^j的系数); C2为乘上第i个表达式后各指数项的系数】
}
}
for(int j = ; j <= n; j++)//刷新当前累乘结果各指数项的系数
{
C1[j] = C2[j];
C2[j] = ;
}
}
printf("%d\n",C1[n]);
} return ;
}
 #include<cstdio>
#include<cstring>
using namespace std;
const int N = ;
int c1[N],c2[N];
int main()
{
int n;
while(~scanf("%d",&n))
{
for(int i = ; i <= n; i++)
{
c1[i] = ;
c2[i] = ;
}
for(int i = ; i <= n; i++){
for(int j = ; j <= n; j++){
for(int k = ; j+k <=n; k+=i){
c2[j+k] += c1[j];
}
}
for(int j = ; j <= n; j++){
c1[j] = c2[j];
c2[j] = ;
}
}
printf("%d\n",c1[n]);
}
return ;
}

hdu_1028_母函数的更多相关文章

  1. hdu2082 找单词 (母函数)

    找单词 题意: 中文题,考虑是不是要写个英文题意..(可惜英语水平不够  囧rz)                (题于文末) 知识点: 母函数(生成函数): 生成函数有普通型生成函数和指数型生成函数 ...

  2. hdu1521 排列组合(指数型母函数)

    题意: 有n种物品,并且知道每种物品的数量ki.要求从中选出m件物品的排数.         (全题文末) 知识点: 普通母函数 指数型母函数:(用来求解多重集的排列问题) n个元素,其中a1,a2, ...

  3. Thinkphp的单字母函数整理

    有人不太喜欢TP这种单字母函数,其实这也是TP的一个特色,如果理解了这些函数的作用,不管是背,还是写,都是非常方便的,接下来我们以字母顺序开始.A函数 B函数 C函数 D函数 F函数 L函数 R函数 ...

  4. ThinkPHP单字母函数(快捷方法)使用总结

    在ThinkPHP中有许多使用简便的单字母函数(即快捷方法),可以很方便开发者快速的调用,但是字母函数却不方便记忆,本文将所有的字母函数总结一下,以方便以后查找. 1.U() URL组装 支持不同UR ...

  5. hdu 1398 Square Coins (母函数)

    Square Coins Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  6. [BZOJ3696][FJSC2014]化合物(异或规则下的母函数)

    题目:http://hzwer.com/3708.html 分析: 类似树分治思想,设f[x][i]表示以x为根的子树的所有点中,与x的距离为i的点有多少个,这个可以预处理出来 然后我们考虑每颗子树对 ...

  7. hdu1521 指数型母函数

    排列组合 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. UVa12298 Super Poker II(母函数 + FFT)

    题目 Source http://acm.hust.edu.cn/vjudge/problem/23590 Description I have a set of super poker cards, ...

  9. HDU4609 3-idiots(母函数 + FFT)

    题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=4609 Description King OMeGa catched three men wh ...

随机推荐

  1. React:入门计数器

    ---恢复内容开始--- 把React的官网入门例子全看一遍,理解了,但自己从头开始写有点困难,这次强迫自己从头开始写,并写好注释: import React, { Component } from ...

  2. C++ 头文件系列(ostream)

    1. 简介 头文件ostream主要定义了一个输出流类模版basic_ostream,该模版继承自basic_ios模版. 2. basic_ostream模版 2.1 sentry类 与basic_ ...

  3. Spring之AOP二

    在Spring之AOP一中使用动态代理将日志打印功能注入到目标对象中,其实这就是AOP实现的原理,不过上面只是Java的实现方式.AOP不管什么语言它的几个主要概念还是有必要了解一下的. 一.AOP概 ...

  4. 编译c语言程序扩展ruby

    环境: windows 10 64bit ruby 2.2.4p230 (2015-12-16 revision 53155) [i386-mingw32] gcc version 4.8.1 (GC ...

  5. lesson - 10 课程笔记

    CTRL+C CTRL+D :前者用于结束一个程序,后者用于结束终端输入. --符号 *:匹配任意长度的任意字符 ?:匹配任意一个字符 #: shell 中表注释 \: 脱意符号 []:任意属于字符组 ...

  6. android的ADK下载地址

    把下面所有的包下载到temp目录下进行安装. 用代理http://ppdaili.com/https://dl-ssl.google.com/android/repository/repository ...

  7. CKEditor 集成CKFinder集成

    lCKEditor原名FckEditor,著名的HTML编辑器,可以在线编辑HTML内容,演示一下.打开.自己人用CKEditor,网友用UBBEditor. l配置参考文档,主要将ckeditor中 ...

  8. c#的关键字

    abstract as base bool break byte case catch char checked decimal default delegate continue double do ...

  9. JavaScript Array 对象方法 以及 如何区分javascript中的toString()、toLocaleString()、valueOf()方法

    1.concat() 2.join() 3.pop() 4.push() 5.reverse() 6.shift() 7.unshift() 8.slice() 9.sort() 10.splice( ...

  10. <转>LOG日志级别

    Level Description Example emerg Emergencies - system is unusable 紧急 - 系统无法使用 Child cannot open lock ...