参考题解: 【算法】震惊!!!史上最详细的卡特兰数浅谈!!! 卡特兰数(好像很有用的说)
介绍
卡特兰数是组合数学中一种著名数列,其前几项为:
1, 2, 5, 14, 42,
132, 429, 1430, 4862, 16796,
58786, 208012, 742900, 2674440, 9694845,
35357670, 129644790, 477638700, 1767263190,
6564120420, 24466267020, 91482563640, 343059613650, 1289904147324,
通项式为:
f
(
n
)
=
C
2
n
n
n
+
1
=
(
2
n
)
!
(
n
+
1
)
!
n
!
f(n)=\frac{C_{2n}^{n}}{n+1}=\frac{(2n)!}{(n+1)!n!}
f(n)=n+1C2nn??=(n+1)!n!(2n)!? 递推式为:
f
(
n
)
=
∑
i
=
0
n
?
1
f
(
i
)
?
f
(
n
?
i
?
1
)
f(n)=\sum_{i=0}^{n-1}f(i)*f(n-i-1)
f(n)=∑i=0n?1?f(i)?f(n?i?1) 常用的是通项式变形:
f
(
n
)
=
C
2
n
n
?
C
2
n
n
?
1
f(n)=C_{2n}^{n}-C_{2n}^{n-1}
f(n)=C2nn??C2nn?1?
经典问题:
一.01序列问题
给出一个n,要求一个长度为2n的01序列,使得序列的任意前缀中1的个数不少于0的个数, 以下为长度为6的序列: 111000 101100 101010 110010 110100
括号问题
矩阵链乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?(h(n)种)
出栈次序问题
一个栈(无穷大)的进栈序列为1,2,3,…n,有多少个不同的出栈序列?
多边形划分为三角形问题
将一个凸多边形区域分成三角形区域的方法数?
给顶节点组成二叉树问题
给定N个节点,能构成多少种形状不同的二叉树? 先去一个点作为顶点,然后左边依次可以取0至N-1个相对应的,右边是N-1到0个,两两配对相乘,就是h(0)*h(n-1) + h(2)*h(n-2) +…+ h(n-1)h(0)=h(n)(能构成h(N)个)
例题:
洛谷1641 生成字符串 Loj10238网格 洛谷P2532 树屋阶梯 洛谷P3200 有趣的数列
|