数学:卡特兰数

令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)

求法超级简单

 1 #include<cstdio>
 2 int n;
 3 int f[25];
 4 int main()
 5 {
 6     scanf("%d",&n);
 7     f[0]=1;f[1]=1;
 8     for(int i=2;i<=n;i++)
 9         for(int j=0;j<i;j++)
10             f[i]+=f[j]*f[i-j-1];
11     printf("%d",f[n]);
12     return 0;
13 }

关键是应用

这里给出四种最典型的应用:

括号化
矩阵连乘: P=a1×a2×a3×……×an,依据乘法结合律,不改变其顺序,只用括号表示成对的乘积
试问有几种括号化的方案?

出栈次序
一个栈(无穷大)的进栈序列为1,23,…,n,有多少个不同的出栈序列?

凸多边形三角划分
在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。
任务是键盘上输入凸多边形的边数n,求不同划分的方案数

给定节点组成二叉搜索树
给定N个节点,能构成多少种不同的二叉搜索树

n对括号正确匹配数目
给定n对括号,求括号正确配对的字符串数

但是不可能直接出这四种

肯定是你看不出来的,然后打表找规律发现是卡特兰数,应该是和递归息息相关的

原文地址:https://www.cnblogs.com/aininot260/p/9488474.html