1.关于多重集和的排列和组合对应着母函数的普通母函数和指数型母函数。至于为啥,证明还是比较难搞得,我只会求组合得母函数得证明,求排列的暂时不会。最近遇到了几个多重集合求排列得问题,把指数型母函数拿出来复习一下。
2.首先,母函数也叫做生成函数。对于一个数列:a1,a2...an.我们定义它的指数型生成函数为:
其中ai就是系数啦。然后有着这么一个基本的计数定理:
对于一个多重集合,我们在计算它的k排列,可以采用它的生成函数计算。看上去有点难懂?来个简单得例子:
首先,这个数要求一个五位数,我们先把这个数的生成函数写一下:
然后化简一下,看一下x^5的系数是多少,那么这个答案就是多少。至于为啥,这就是母函数的神奇所在了,证明就不再证明了(毕竟我也不会证这个)。
到这里大概直到母函数怎么解决计数的问题了。然而题目中哪有这么easy????
说到easy,那就看个最easy的版本。
HDU 2065:
一句话题意:给你四种字符和一些限制,构造一个长度为n的字符串有多少种方案数。一看N,完了,除了O(1)和O(log(N))的做法,此题无解。
那么简单分析,我们根据限制写这个函数的生成函数:
(PS:简单解释一些这个函数,因为AC都是偶数,所以只能拿偶数个,BD无所谓了,全部写上)
这个咋整?无穷级数???求和呗。前边和后边唯一的区别就是没有奇数项,这里就是数学基本功了,如果你足够敏感,一眼就看出来了前边数双曲余弦函数的泰勒展开,后边数e^x的泰勒展开。(PS:啥玩意,双曲函数是个啥?)
PS:补充双曲函数:
那么把级数求个和,然后就是:
继续化简:
有了这个式子,我们需要找到x^n的系数,那么把G(x)展开:
考虑第n项的系数:
就是答案。直接快速幂求答案O(logN)即可。
这个应该算是指数型母函数的一半用法了,基本上都是这么玩的。今年上海区域赛网赛有一个题,用到了这些东西。突然有感而发,写下了这个东东复习一下。