【模板】母函数(生成函数)
来源:互联网 发布:js 分割字符串 编辑:程序博客网 时间:2024/05/18 00:09
什么是母函数呢?我还是咨询一下百度百科吧。
定义:
对于任意数列a0,a1,a2...an 即用如下方法与一个函数联系起来:
~G(x) = a0 + a1x + a2x^2 + a3x^3 +....+ anx^n
则称G(x)是数列的生成函数(generating function)
例子:
比较典型的是:A(x) = (1+x)^n~C(n,0),C(n,1),C(n,2),C(n,3),.....,C(n,n)
我理解的母函数是这个意思:比如:有两种类型的纸币1元和5元分别为两张和三张。则他们的总共组合有这样几种情况。
(1+2x)*(1+3x^5)。
解释一下(1+2x),x的指数指的是1元价值的纸币,其x的系数是取其1元(也就是指数)有多少种方式。乘出来的式子也能用这种方式去解释。
然后就是母函数的求法了。有种背包的思想在里面,先把第一个式子(也可理解为第一种情况)加入背包中c1[i]。i表示取i有c1[i]种方法,一般初始都是1种。c1[0]也要注意初始化为1.然后从第二个式子开始背包处理,能够塞入背包的就加上前面情况种数。临时开一个数组存放数据,也就是c2[k+j]+=c1[j].每加上一个式子便将值更新至c1中,并将c2清零。
#include<iostream>#include<stdio.h>using namespace std;int main(){ int N; int c1[125],c2[125]; while(cin>>N) { int i,j,k; for(i=0;i<=N;i++)//初始化第一个表达式的系数 { c1[i]=1; c2[i]=0; } for(i=2;i<=N;i++) {//从第二个表达式开始,因为有无限制个,所以有n个表达式 for(j=0;j<=N;j++) {//从累乘的表达式后的一个表达式第一个到最后一个 if (c1[j]) //这个是我自己加的 for(k=0;k+j<=N;k+=i) {//k为第j个变量的指数,第i个表达式每次累加i c2[j+k]+=c1[j]; } } for(j=0;j<=N;j++) {//滚动数组算完一个表达式后更新一次 c1[j]=c2[j]; c2[j]=0; } } printf("%d\n",c1[N]); } return 0;}
0 0
- 【模板】母函数(生成函数)
- 函数模板和模板函数的生成
- 生成函数(母函数)
- 生成函数(母函数)
- 生成函数(母函数)
- 母函数(生成函数)
- 母函数(生成函数)
- 母函数(生成函数)
- 母函数(生成函数)
- 生成函数入门【模板整理】
- 函数模板、类模板生成静态库
- 函数模板的声明和模板函数的生成
- 生成函数(母函数)1003
- 生成函数(母函数)1005
- 母函数(生成函数)学习
- 模板(一)----->函数模板
- HDU1028 (母函数模板)
- 母函数 入门 + 模板
- Unity3D Update() 和 FixedUpdate()区别
- UITableView横向滚动
- C++内联函数
- 记录自己在centos虚拟机搭建简易git服务器的过程,分享给大家
- windows svn服务端搭建及eclipse集成svn
- 【模板】母函数(生成函数)
- 想要成为富人所必须具备的特性
- php常用正则过滤字符串代码
- lamp(Linux+Apache+MySQL+PHP)命令大全
- SVN版本控制初探
- POJ 3692 Kindergarten (最大独立集)
- 由android:process引发的内存限制的问题
- 如何在编程生涯中有一个好的开端
- 连通图存在欧拉回路,等价于每个节点的度为偶数