Catalan数

关于Catalan数的解释网上已经有很多了,这里写一下一个常用的Catalan数模型

出自《组合数学》:有n 个1和n个-1 ,求有多少个排列使得对任意前k个数,和>=0

分析:对于任意前k个数和>=0,这不好求,所以应该转化为反面问题:求有多少个排列使得存在1~k的一段和<0(我们称之为不合法排列)

考虑一个不合法序列,对于最小的K,使得存在1~k的一段和<0,就一定有1~k-1的和=0,Ak=-1;

那么考虑翻转前k个数,就得到了一个有n+1个1,n-1个-1的序列;

同时从反面说,对于每一个有n+1个1,n-1个-1的序列,都一定可以通过翻转前若干个数的到一个不合法排列。

以上两点说明翻转后的序列和我们要求的不合法序列是一一对应

那么问题就转化为了求有n+1个1,n-1个-1的序列的个数。显然答案为(2n)/(n+1)!/(n-1)!

那么原问题就是总排列数-不合法序列数=(2n)!/n!/n!-(2n)/(n+1)!/(n-1)!

化简正好是Catalan数。


考虑一个变形,有n个1和m个-1时,怎么做?

思路和刚才一样。翻转后我们可以得到有n+1个1,m-1个-1的序列。

每一个不合法序列对应一个有n+1个1,m-1个-1的序列,每一个有n+1个1,m-1个-1的序列都代表一个不合法序列。

同样的,每一个含有n+1个1,m-1个-1的序列和一个不合法序列一一对应

那么根据刚才的推导过程,最终答案为(m+n)!/m!/n!-(m+n)/(n+1)!/(m-1)!

这就是 SCOI 2010 字符串  的解法。

只不过原题是1和0,要求1的数量>=0的数量,和这个是一样的。


同时,这个模型还可以转化成很多问题。+1和-1可以代表很多东西。

比如括号匹配:(和)对应+1和-1;

单调路径,→对应+1,↑对应-1;

还有著名的排队买票问题:有2n个人排成一行进入剧场。入场费5元每人。但现在2n个人中,n个人持有5元,n个人持有10元,且售票处开始时没有钱。问有多少种排队方式使得每个人都保证有钱找(或者不用找)?

把持有10元的人看做+1;5元的-1

你可能感兴趣的:(cat)