↓ Skip to main content
  1. Posts/

指数型母函数总结

·425 words·1 min
Note: This article is available in Chinese only. 本文暂无英文版本。 View original

指数型母函数网上的资料不是很多,推荐毛杰明的09年国家集训队论文《母函数的性质及应用》

以及Richard A.Brualdi 所著的《组合数学》的第七章来看…倒不用全看懂..但是这本上面干货比较多。

我来说下自己的理解:

指数型母函数和普通型母函数(不加普通二字也是指它)的区别是后者是用来求解组合问题(顺序无关行),而前者是求解排列问题(不同的顺序属于不同的方案)。

对于多重排列问题,由于某种元素可能有多个,需要去掉它的重复度(除以该种元素的个数的阶乘),而这个除以阶乘的形式和泰勒级数展开中的一些函数的展开形式一致(或者是一些变形)。

因此母函数可以用泰勒级数来化简。

这是求解这类问题最核心的内容。

也有直接算的。比如这个hdu1521排列组合。hdu1521排列组合解题报告但是由于阶乘的存在。。这类问题求解的范围十分有限。 所以更多的是下面这些题,难度递增,建议先独立思考… hdu2065解题报告 poj1322 chocolate解题报告 cf451E解题报告

Related

poj 1322 chocolate (指数型母函数 )

·1136 words·3 mins
http://poj.org/problem?id=1322 题意: 思路:别看n,m很大,但是想一下,m显然不可能大于c(如果大于c,那么根据抽屉原理,至少存在一种巧克力大于一个,然而大于一个就会被取走…矛盾),这样概率为0。m也不可能大于n,因为最好的情况就是取出的巧克力都放在了桌子上,如果总共取的还不到n个,又怎么可能剩下m(m>n)个呢。此外,还需要n,m奇偶性相同,否则设n-m=2K+1,说明如果要剩余m个,那么就要减少2k+1个,但是巧克力是两个两个减少的,减少的个数一定是偶数,因此矛盾。所以n,m奇偶性相同。

poj 3734 Blocks (指数型母函数,泰勒级数展开)

·234 words·1 min
http://poj.org/problem?id=3734 题意+思路同******hdu2065红色病毒解题报告 代码实现 1/* *********************************************** 2Author :111qqz 3Created Time :2016年02月27日 星期六 16时39分53秒 4File Name :code/poj/3734.cpp 5************************************************ */ 6 7#include <cstdio> 8#include <cstring> 9#include <iostream> 10#include <algorithm> 11#include <vector> 12#include <queue> 13#include <set> 14#include <map> 15#include <string> 16#include <cmath> 17#include <cstdlib> 18#include <ctime> 19#define fst first 20#define sec second 21#define lson l,m,rt<<1 22#define rson m+1,r,rt<<1|1 23#define ms(a,x) memset(a,x,sizeof(a)) 24typedef long long LL; 25#define pi pair < int ,int > 26#define MP make_pair 27 28using namespace std; 29const double eps = 1E-8; 30const int dx4[4]={1,0,0,-1}; 31const int dy4[4]={0,-1,1,0}; 32const int inf = 0x3f3f3f3f; 33const LL MOD =1E4+7; 34LL n; 35LL res; 36LL ksm(LL a,LL b) 37{ 38 LL res = 1; 39 while (b) 40 { 41 if (b&1) res=(res*a)%MOD; 42 b = b>>1; 43 a = (a*a)%MOD; 44 } 45 return res; 46} 47int main() 48{ 49 #ifndef ONLINE_JUDGE 50 freopen("code/in.txt","r",stdin); 51 #endif 52 53 54 int T; 55 cin>>T; 56 while (T--) 57 { 58 scanf("%lld",&n); 59 60 LL ans = ksm(4,n-1)+ksm(2,n-1); 61 ans %=MOD; 62 printf("%lld\n",ans); 63 64 } 65 66 67 68 #ifndef ONLINE_JUDGE 69 fclose(stdin); 70 #endif 71 return 0; 72}

hdu 1521 排列组合 (指数型母函数模板题)

·505 words·2 mins
http://acm.hdu.edu.cn/showproblem.php?pid=1521 题意:有n种物品,并且知道每种物品的数量。要求从中选出m件物品的排列数。例如有两种物品A,B,并且数量都是1,从中选2件物品,则排列有"AB",“BA"两种。