组合数学---卡特兰数

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;
}
View Code

可以解决的问题:
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.

猜你喜欢

转载自www.cnblogs.com/hznumqf/p/12331222.html