Always keep a b|

vanueber

园龄:2年6个月粉丝:0关注:2

卡特兰数学习笔记

引入

(0,0) 走到 (n,n),求不越过 y=x 的方案数。

不考虑是否合法的方案数是 (2nn),即从 2n 个移动中选 n 个向右的。

接下来考虑不合法的情况,不合法当且仅当碰到了 y=x+1 这条直线,设这个点是 (p,p+1),将后面的折线沿着 y=x+1 翻折。

t

从图中不难看出,不合法路径的终点翻折后变成了 (n1,n+1),因为这是 A 的对称点。于是所有不合法的路径数量就是从 (0,0) 走到 (n1,n+1) 的方案数,因为二者是一一对应关系。

最终的答案就成了 (2nn)(2nn+1)

卡特兰数

上个例子的答案就是卡特兰数的定义。OEIS 上的 卡特兰数

接下来介绍卡特兰数的其他形式

1

Hn=(2nn)(2nn+1)

2

Hn=(2nn)n+1

3

Hn=i=1nHi1Hni

特别地有 H0=H1=1

从网格问题证明:

枚举第一次到达 y=x 的点 (i,i),其中 1in

那么前一半的方案数等价于 (1,0)(i,i1),且不经过 y=x1 的方案数,就是 Hi1

后一半是 Hni,那么由乘法原理一个 i 的贡献就是 Hi1Hni

4

Hn=Hn(4n2)n+1

经典问题

网格行走问题

(0,0)(n,n) 且不经过 y=x 的方案数为 Hn

(0,0)(n,m) 且不经过 y=x 的方案数为 (n+mn)(n+mm1)

如下图:

每一条不合法的路径都可以转化为一条 (0,0)(m1,n+1) 的路径

P1641 [SCOI2010] 生成字符串

加入一个 1 看成向右走,加入一个 0 看成向下走,就是上述问题。

出栈方案数问题

P1044 [NOIP 2003 普及组] 栈

将进栈看成向右,出栈看成向上即可。

二叉树总数

k 个节点可构造出二叉树总数是 Hk

证明:枚举 i,左端点数 i1,右端点数 ni,成了两个子问题 Hi1,Hni,发现公式与卡特兰数是相同的。

阶梯划分问题

P2532 [AHOI2012] 树屋阶梯

1

考虑 fi 表示 i 阶阶梯划分数量,考虑一个矩形 (0,0) 划分到横坐标为 i 的点,剩下的就是 i1ni 的子问题,正好符合卡特兰数的公式。

本文作者:vanueber

本文链接:https://www.cnblogs.com/vanueber/p/18716116

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   vanueber  阅读(2)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起