卡特兰数:
1 通项公式:h(n)=C(n,2n)/(n+1)=(2n)!/((n!)*(n+1)!)
2递推公式:h(n)=((4*n-2)/(n+1))*h(n-1); h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0).
3前几项为:h(0)=1,h(1)=1,h(2)=2,h(3)=5,h(4)=14,h(5)=42,......
应用:
(1)序列出栈的情况总数:
比如123 共有5种出栈顺序。对于n个数出入栈,入栈记为1,出栈记为0.则出入栈序列为1101001。。。
但是要保证从左往右看,1的个数大于0的个,因为入栈个数要大于出栈个数。
于是我们的序列长度为2n,其中有n个1,n个0.总数:C(n,2n)。
不符合要求的数为:C(n+1,2n)
(2)给出n个点,求组成二叉树的所有种数,2个点组成2种二叉树,3个点组成5种二叉树)
解题思路和(1)相似。根节点看做1,有孩子为1,没有为0。中序遍历仍然可以看做为一个(1)中的序列。
按照卡特兰数进行求解。
(3)给出一个棋盘n*n,求从左下角到右上角的不经过对角线的所有走法
解题思路:把向右(向左)走看做1,向上走看做0。行走的序列是一个卡特兰序列。按照卡特兰数进行求解。
注意棋盘是对称的,求出的树*2
(4)买票问题:有m个人手里拿的是50元的,n个人拿的是100元的,问使买票过程不中断的排队方式。