zoukankan      html  css  js  c++  java
  • 卡特兰数——什么鬼,又是一个板子

     一、关于卡特兰数

           卡特兰数是一种经典的组合数,经常出现在各种计算中,其前几项为 : 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452, ...

          二、卡特兰数的一般公式

          卡特兰数满足以下性质:

          令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)。也就是说,如果能把公式化成上面这种形式的数,就是卡特兰数

          当然,上面这样的递推公式太繁琐了,于是数学家们又求出了可以快速计算的通项公式。h(n)=c(2n,n)-c(2n,n+1)(n=0,1,2,...)。这个公式还可以更简单得化为h(n)=C(2n,n)/(n+1)。后一个公式都可以通过前一个公式经过几步简单的演算得来,大家可以拿起笔试试,一两分钟就可以搞定。

    详解看https://blog.csdn.net/wookaikaiko/article/details/81105031

    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    using namespace std;
    typedef long long ll;
    int n;
    ll ans[100]={1,1};
    
    int main()
    {
        for(int i=2;i<=32;i++)
        {
            for(int j=0;j<i;j++)
            {
                ans[i]+=ans[j]*ans[i-j-1];
            }
        }
        while(scanf("%d",&n)&&n)
        {
            printf("%lld
    ",ans[n]);
        }
        return 0;
    }

    用途:括号化

    出栈次序 凸多边形三角划分 给定节点组成二叉搜索树 n对括号正确匹配数目

    我也不知道这些都是什么啊,百度查的;

  • 相关阅读:
    bootstrap学习笔记
    java-多态
    java-重写
    java-继承
    java-包
    java-封装
    java-可变参数
    java-标准输入
    java-构造方法
    private、public、this关键字
  • 原文地址:https://www.cnblogs.com/WHFF521/p/11229157.html
Copyright © 2011-2022 走看看