• 数学:卡特兰数


    令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对括号,求括号正确配对的字符串数

    但是不可能直接出这四种

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

  • 相关阅读:
    H3C 12508 收集诊断信息
    hzwer收集课件笔记
    hzwer收集课件笔记
    Educational Codeforces Round 85 (Rated for Div. 2)
    Codeforces Round #632 (Div. 2)
    Codeforces Round #588 (Div. 2)
    Educational Codeforces Round 73 (Rated for Div. 2)
    Codeforces Round #631 (Div. 2)
    Codeforces Round #630 (Div. 2)
    复试准备
  • 原文地址:https://www.cnblogs.com/aininot260/p/9488474.html
Copyright © 2020-2023  润新知