zoukankan      html  css  js  c++  java
  • 卡特兰数的应用

    Description

      zzy今天刚买了两个水瓢A和B,容量都是为1升,童心未泯的他打算用这个水瓢来玩游戏。

      首先zzy准备了一个容量可看作无穷大的水缸,刚开始水缸是空的,然后用水瓢A往水缸里加水,用水瓢B把水缸里的水舀出去,当使用 水瓢B把水舀出去时水缸里必须要至少有1升的水。这样子使用N次水瓢A,也使用N次水瓢B,最后水缸会依旧空的。

    Input

      输入有多个例子,直到文件结束。

      每个例子仅含一个数N(0<N<=10000),表示你必须使用N次A水瓢和N次B水瓢。

    Output

      对于每个例子,请输出一个数,表示一共有多少种正确的舀水方式使得舀水过程中 使用B水瓢时水缸里总会有足够的水。

     (由于数字比较大,输出的答案模1000000007)

    这道题是个水题,关键是判断出是进出栈这样一个模型。

    进出栈满足卡特兰数,所以这道题等于是一个打表输出的过程

    下面贴代码,也作为打表的模板。

     1 #include<iostream>
     2 #include<string.h>
     3 #include<stdio.h>
     4 #define mod 1000000007
     5 #define maxn 10000+10
     6 #define LL long long
     7 LL C[maxn];
     8 using namespace std;
     9 void built()
    10 {
    11     memset(C,0,sizeof(C));
    12     C[1]=1;C[2]=1;C[3]=1;
    13     for (int i=4;i<maxn;i++)
    14     {
    15         for(int j=2;j<=i-1;j++)
    16         {
    17             C[i]+=((C[j]%mod)*(C[i+1-j]%mod))%mod;
    18         }
    19         C[i]=C[i]%mod;
    20     }
    21     return ;
    22 }
    23 int main()
    24 {
    25     built();
    26     int n;
    27     while(~scanf("%d",&n))
    28     {
    29         printf("%lld
    ",C[n+2]);
    30     }
    31     return 0;
    32 }

    递推的公式白书上有。

    但鉴于个人的数学能力,我还是列举一些卡特兰数的模型。

    形式:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786.......

    令h(0)=1,h(1)=1,catalan数满足递推式[1]
    h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2) 复杂度O(n^2/2)
    另类递推式[2]
    h(n)=h(n-1)*(4*n-2)/(n+1);    复杂度O(n)
     
    常用模型:
    1、矩阵链乘加括号法
    2、出进栈不同次序数
    3、划分三角形个数
    4、n节点构成的二叉树个数
    5、二分选择路径数(下图)

    Description

      zzy今天刚买了两个水瓢A和B,容量都是为1升,童心未泯的他打算用这个水瓢来玩游戏。

      首先zzy准备了一个容量可看作无穷大的水缸,刚开始水缸是空的,然后用水瓢A往水缸里加水,用水瓢B把水缸里的水舀出去,当使用 水瓢B把水舀出去时水缸里必须要至少有1升的水。这样子使用N次水瓢A,也使用N次水瓢B,最后水缸会依旧空的。

    Input

      输入有多个例子,直到文件结束。

      每个例子仅含一个数N(0<N<=10000),表示你必须使用N次A水瓢和N次B水瓢。

    Output

      对于每个例子,请输出一个数,表示一共有多少种正确的舀水方式使得舀水过程中 使用B水瓢时水缸里总会有足够的水。

     (由于数字比较大,输出的答案模1000000007)

  • 相关阅读:
    Socket原理与编程基础
    Hello cnblogs
    c# List 分页问题
    chrome下载Word失败问题
    前端时间Date显示问题踩坑
    Vue跳转同一界面多次,使用不同数据进行渲染
    Hadoop在Linux环境下的配置
    RabbitMQ下载安装
    Codeforces 527 C. Glass Carving
    python压缩、解压文件
  • 原文地址:https://www.cnblogs.com/little-w/p/3349402.html
Copyright © 2011-2022 走看看