• [学习笔记] 卡特兰数


    1. 一些公式

    1.1. 递推式

    [H_n=sum_{i=0}^{n-1}H_icdot H_{n-i-1} ]

    原问题可以转化为:在平面直角坐标系中,从 ((0,0))((n,n)) 的不越过 (y=x) 的方案数。

    于是我们可以枚举 (i),表示这种路径经过 ((i,i)) 却不经过 ((j,j),jin(i,n))。这样计算是不重不漏的。经过 ((i,i)) 的方案数是 (H_i),对于后面的方案,容易发现满足条件时一定有这两步:((i,i) ightarrow (i+1,i),(n,n-1) ightarrow (n,n))。这就变成一个大小为 (n-i-1) 的子问题。所以递推式正确。

    1.2. 通项式

    [H_n=inom{2n}{n}-inom{2n}{n+1} ]

    [=frac{1}{n+1}cdot inom{2n}{n} ]

    懒得证了。

    事实上,我们可以用类似的方法分析另一个问题:在平面直角坐标系中,从 ((0,0))((n,m)) 的不越过 (y=x+b-1) 的方案数(默认 ((n,m))(y=x+b) 的右下方,不是应该也类似)。

    我们将 ((n,m)) 沿 (y=x+b) 对称,得到对称点 ((m-b,n+b))。那么就有:

    [ ext{Ans}=inom{n+m}{n}-inom{n+m}{n+b} ]

    1.3. 递推式'

    [H_{n+1}=frac{4n+2}{n+2}cdot H_n ]

    懒得证了。

    2. 一些题目

    例 1. 经典模型

    F.A.Q.

    • 对于有 (n+1) 个叶子的满二叉树个数?戳这

    • (n) 个长方形填充一个高度为 (n) 的阶梯状图形的方法个数?

      首先由于有 (n) 个阶梯,我们必须保证每个长方形填一个阶梯,因为一个长方形不可能填两个阶梯。问题就和 1.1. 递推式 很类似了:枚举填了左上角的长方形填了哪个阶梯,就可以划分成两个子问题。

  • 相关阅读:
    jQuery的简单实用的25个知识点
    toDoList案例
    缓动动画函数的封装
    轮播图的设置:
    Django学习:cookie和session
    Django学习:ORM
    Django学习:中间件
    Django学习:url路由系统
    Django学习:模板继承和配置静态文件
    Django学习:模板语法
  • 原文地址:https://www.cnblogs.com/AWhiteWall/p/12605851.html
Copyright © 2020-2023  润新知