组合数学---卡特兰数
long long f[25]; int main() { f[0] = 1; cin >> n; for (int i = 1; i <= n; i++) f[i] = f[i - 1] * (4 * i - 2) / (i + 1); //这里用的是常见公式2 cout << f[n] << endl; return 0; }
可以解决的问题:
1.括号匹配问题,n对括号有多少种匹配方式?
2.进出栈问题,一个无穷大的栈,1,2,3...N 有多少种不同的出栈方式
3.二叉树种类问题:n个节点构成的二叉树,共有多少种不同情形
4.n*n的网格从左下走到右上角,不可走对角线,有多少种不同走法
5.凸多边形分割问题:求一个凸多边形区域划分成三角形区域的方法
6.集合划分问题:对于集合{1,2,3,...n}的不交叉划分的数目是多少
7.乘积重组问题:矩阵链乘P=a1*a2*a3*...an
8.连线不相交问题:在圆上有2n个点,将这些点连起来使得所得到的n条线段不相交的方法数
9.高矮排队问题:2n个高矮不同的人,每排必须是高到矮的顺序,而且第二排比第一排高,问排列的方式有多少种
10.门票找钱问题:
11.