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

生成函数是说,构造这么一个多项式函数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. jquery禁用select和取消禁用

    $("#id").attr("disabled","disabled"); $("#id").removeAttr(&q ...

  2. (4)三剑客之awk

    (1)awk工作原理#awk -F: '{print $1,$3}' /etc/passwd 1)awk使用一行作为输入,并将这一行赋给内部变量$0,每一行也可称为一个记录,已换行符结束 2)然后行被 ...

  3. 安装mezzanine时报:storing debug log for failure【已解决】

    同时还提示: bz2 module is not found(貌似) 解决方法: 1.重新安装python wget http://bzip.org/1.0.6/bzip2-1.0.6.tar.gz ...

  4. HDU 4355.Party All the Time-三分

    Party All the Time Time Limit: 6000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Other ...

  5. HDU 多校1.2

    Balala Power! Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  6. 17、Flask实战第17天:Flask-cookie

    cookie的基本概念 在网站中,http请求是无状态的.也就是说即使第一次和服务器连接并且登录成功后,第二次请求服务器依然不能知道当前请求的是哪个用户. cookie的出现就是为了解决这个问题,第一 ...

  7. 【权值分块】bzoj3224 Tyvj 1728 普通平衡树

    权值分块和权值线段树的思想一致,离散化之后可以代替平衡树的部分功能. 部分操作的时间复杂度: 插入 删除 全局排名 全局K大 前驱 后继 全局最值 按值域删除元素 O(1) O(1) O(sqrt(n ...

  8. angularjs+requirejs整合

    通过requirejs的配置让angularJS可以正常运行.以下是配置的步骤: 环境需求 require.js angular.js 有了这两文件,就可以进行下一步了,具体将文件放到哪个目录,可以跟 ...

  9. React Native之iOS App打包

    iOS打包步骤(一.二.三可不按照顺序) 步骤一: 选择iOS Device(以下两者选其中一个即可) 选择 Generic iOS Device (个人建议使用这个) 选择Generic iOS D ...

  10. 使用GIT时排除NuGet的packages文件夹

    这段时间一直在用GIT做本地自己写的程序的源码管理工具,在使用的过程中发现了一个问题:Git往往会把NuGet的packages文件夹作为项目的一部分给添加进来了.网上搜了一下,原因是GIT只是和文件 ...