母函数又叫生成函数,原是数学上的一个名词,是组合数学中的一个重要理论。

生成函数是说,构造这么一个多项式函数g(x)。使得x的n次方系数为f(n)。



对于母函数,看到最多的是这样两句话:



1.“把组合问题的加法法则和幂级数的乘幂相应起来。”

2.“把离散数列和幂级数一 一相应起来,把离散数列间的相互结合关系相应成为幂级数间的运算关系。最后由幂级数形式来确定离散数列的构造。 “

 母函数能够解决一些问题 如 砝码问题,整数划分,等等

砝码问题:

有1克、2克、3克、4克砝码各一枚。问能称出哪几种重量?每种重量各有几种方案?



以下是用母函数解决问题的思路:



首先。我们用X表示砝码。X的指数表示砝码的重量。那么,假设用函数表示每一个砝码能够称的重量,



1个1克的砝码能够用函数X^0 + X^1表示。



1个2克的砝码能够用函数X^0 + X^2表示,



依次类推。

假设我们把上面2个多项式相乘。能够得到X^0 + X^1 + X^2 + X^3。继续把它与X^0 + X^3相乘,得到X^0 + X^1 + X^2 + 2*X^3 + X^4 + X^5 + X^6。

接着把它与X^0+X^4相乘,最后得到X^0 + X^1 + X^2 + 2*X^3 + 2*X^4 + 2*X^5 + 2*X^6 + 2*X^7 + X^8 + X^9 + X^10。

因为X的指数表示的是重量,所以。在相乘时,依据幂的运算法则(同底幂相乘,指数相加),得到的结果正是全部的方案。

并且,每一个X前面的系数代表它有几种方案。



须要注意的是,假设有2个1克的砝码,应该用X^0 + X^1 + X^2表示,而不是X^0 + 2*X^1。

整数划分是个非常经典的问题,划分规则就不再细述,直接说思路。与上面的问题相比,每种砝码的个数不再是1个。而是无限个。

于是,



1克的砝码能够用X^0 + X^1 + X^2 + X^3 ……表示,



2克的砝码能够用X^0 + X^2 + X^4 + X^6……表示。



3克的砝码能够用X^0 + X^3 + X^6 + X^9……表示,



依次类推。

相乘后求出X^n的系数,就是结果。

以后在ACM上难免会遇到这种问题。我们仅仅需模拟两个多项式相乘就可以。

做题思路就是开两个数组。一个数组是ans[    ]。我们用来保存当前得到的多项式的各项系数,temp[   ] 则是暂时的一个数组。用来保存每次计算的暂时结果。计算完后,赋值给ans[   ] 。然后清零。进行下一次计算;

计算的时候开3层for  循环,最外层,记录它正在与第几个多项式相乘。第二层,表示c1中的每一项。第三层表示后面被乘多项式中的每一项。

练习题目有HDU 1085     HDU1398     HDU1028   HDU1171

hdu 1028  http://blog.csdn.net/jk13171217/article/details/38303725

hdu 1085 http://blog.csdn.net/jk13171217/article/details/38303995

hdu 1398 http://blog.csdn.net/jk13171217/article/details/38303933

hdu 1171  http://blog.csdn.net/jk13171217/article/details/38303111 (具体介绍1171题)

acm之路--母函数 by小宇的更多相关文章

  1. nyist 606 ACM之路

    http://acm.nyist.net/JudgeOnline/problem.php?pid=606 ACM之路 时间限制:1000 ms | 内存限制:65535 KB 描述 转眼间,12级新生 ...

  2. ACM之路(转载)

    转载自:https://www.cnblogs.com/tianjintou/p/4139416.html 要注意,ACM的竞赛性强,因此自己应该和自己的实际应用联系起来. 适合自己的才是好的,有的人 ...

  3. 另一个ACM之路建议

    ACM联系建议 一位高手对我的建议: 一般要做到50行以内的程序不用调试.100行以内的二分钟内调试成功.acm主要是考算法的 ,主要时间是花在思考算法上,不是花在写程序与debug上. 下面给个计划 ...

  4. ACM之路

    从10月我刚接触到acm竞赛,到现在2017年2.20接近4个月的时间,我才刷到200道题.在刷题的过程中,我曾遇到困难,我也从一次性就a过,但是有时候会想到放弃.不过既然已经踏进来一只脚,还不如就好 ...

  5. ACM之路——上车了

    校赛坚持到底,拿到了银牌:第一批进入ACM队集训,期末考试之前仍然代码不断,甚至感觉对不起大学第一次的期末考试,五天复习高数,两天复习英语,看到英语成绩是胸口突然好痛,好难受……就为了成为ACM正式队 ...

  6. 回归——继续我的ACM之路!!

    回归啦~~18年省赛结束后第一次参赛拿到了省级银牌对我是一个很大的鼓励,这是所感兴趣的事,我能做的不错,也就不愧于心了. 修整了两周多左右,建了建模,和阔爱的对象狂了两周,终于要静下来了,静下来一想, ...

  7. 完成了C++作业,本博客现在开始全面记录acm学习历程,真正的acm之路,现在开始

    以下以目前遇到题目开始记录,按发布时间排序 ACM之递推递归 ACM之数学题 拓扑排序 ACM之最短路径做题笔记与记录 STL学习笔记不(定期更新) 八皇后问题解题报告

  8. 剪辑的楼天城的ACM之路

    楼天城楼教主的acm心路历程(剪辑) 利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年 ...

  9. ACM之路(12)—— KMP & 扩展KMP & Manacher

    最近做完了kuangbin的一套关于kmp的题目(除了一道字典树的不会,因为还没学字典树所以先放放),做个总结.(kuangbin题目的链接:http://acm.hust.edu.cn/vjudge ...

随机推荐

  1. 二维字符数组利用gets()函数输入

    举例: ][]; ;i<;i++) gets(a[i]); a是二维字符数组的数组名,相当于一维数组的指针, 所以a[i]就相当于指向第i个数组的指针,类型就相当于char *,相当于字符串.

  2. 浅析module.exports和exports区别和使用

    module.exports和exports 写node的时候,特别是自定义模块的时候,都是一顿乱敲,然后module.exports={}完事. 但有时候去看别人写的代码的时候会发现还可以expor ...

  3. centos7下扩充swap空间

    命令:swapon -s #查看系统的swap配置命令 创建步骤: 1. 决定SWAP文件的大小,先指定区块大小:bs,再指定区块数量count,则SWAP文件的大小是:count*bs 在root用 ...

  4. [BZOJ4337][BJOI2015]树的同构(树的最小表示法)

    4337: BJOI2015 树的同构 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1023  Solved: 436[Submit][Status ...

  5. [Codeforces 35E] Parade

    Link: Codeforces 35E 传送门 Brief Intro: 给定$n$个矩形,求出轮廓线的所有顶点 Solution: 对于此类可拆分成多个事件点的题目,使用扫描线的方式 将每个矩形分 ...

  6. [CF983E]NN country

    题意:给一棵树,有许多条巴士线路$(a_i,b_i)$(巴士在路径上每个点都会停车),多次询问从一点到另一点最少要坐多少次巴士 首先dfs一遍预处理出一个点向上坐$2^k$次巴士能到的最浅点,于是我们 ...

  7. 使用Maven下载jar包

    有些开源项目不直接提供jar包的下载,而是建议使用Maven下载,以开源库hipster(https://github.com/citiususc/hipster,http://www.hipster ...

  8. 13test04:捕鱼

    #include<iostream> using namespace std; int main() { int fish_sum,flag=1; for(fish_sum=6;flag; ...

  9. 长按事件OnLongClickListener

    1.MainActivity.java package com.example.administrator.hello4; import android.support.v7.app.AppCompa ...

  10. xib中Autolayout的使用

    压缩包下载链接:http://share.weiyun.com/ceb6107857789ae3ec08d4a83269713d (密码:Kd33)