卡特兰数
卡特兰数是组合数学中一个常出现在各种计数问题中出现的数列。
卡特兰数前几项为 :
C0=1,C1=1,C2=2,C3=5,C4=14,C5=42,C6=132,C7=429,C8=1430,C9=4862,C10=16796
输入一个整数n,计算h(n)。
令h(0)=1,h(1)=1,Catalan数满足递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)*h(0) (n>=2)
例如:
h(2)=h(0)h(1)+h(1)h(0)=11+11=2
h(3)=h(0)h(2)+h(1)h(1)+h(2)h(0)=12+11+21=5
递推关系的解为:
卡特兰数的应用:
1,出栈种类
int f[100];//f[i]表示i个数的出栈序列有多少个
//将n个数一次标号为1,2,3,...n 假设第k个数最后出栈,即最后输出的n个数中最后一个为k
//k前面有k-1个数先出栈有f[k-1]种情况,k后面有n-k个元素,有f[n-k]种情况
2,括号匹配
3,矩阵链乘
4,n个节点构成二叉树有几种情形
5,圆上的不相交线段数量
6,凸多边形三角剖分
7,找零钱