数学:卡特兰数
令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,2,3,…,n,有多少个不同的出栈序列? 凸多边形三角划分 在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。 任务是键盘上输入凸多边形的边数n,求不同划分的方案数 给定节点组成二叉搜索树 给定N个节点,能构成多少种不同的二叉搜索树 n对括号正确匹配数目 给定n对括号,求括号正确配对的字符串数
但是不可能直接出这四种
肯定是你看不出来的,然后打表找规律发现是卡特兰数,应该是和递归息息相关的