Chgtaxihe's blog Chgtaxihe's blog
首页
练习
算法学习
读书笔记
小玩意

Chgtaxihe

首页
练习
算法学习
读书笔记
小玩意
  • 数论

    • 一些小问题
    • 二次剩余学习笔记
    • 卡特兰数学习笔记
      • $hn=C{2n}^{n}-C_{2n}^{n+1}$的证明
      • HDU 4828
      • HDU 1133
    • 同余最短路学习笔记
    • 康托展开学习笔记
    • 快速傅里叶变换学习笔记
    • 拉格朗日插值学习笔记
    • 拓展欧几里得学习笔记
    • 斐波那契数列学习笔记
    • 斯特林数笔记
    • 本原勾股数组学习笔记
    • 模运算学习笔记
    • 欧拉函数
    • 类欧几里得学习笔记
    • 素性检测与大数分解
    • 素数计数问题
    • 组合数问题
    • 高斯整数学习笔记
  • 动态规划

  • 暴力

  • 图论

  • 数据结构

  • 字符串

  • 几何

  • 博弈论

  • 其他

卡特兰数学习笔记

# 前言

今天打个人排位赛被打自闭了。大佬们都会HDU 4828 (opens new window),我却连卡特兰数是啥都不知道。

# 例题引入洛谷P1044 (opens new window)

题意: 给定nnn个元素[1,n][1, n][1,n],从大到小入栈,求有多少种出栈方式。

解:考虑最后一个出栈的元素为kkk,那么比kkk小的元素出栈的方式有ans(k−1)ans(k-1)ans(k−1)种,比kkk大的元素出栈方式有ans(n−k)ans(n-k)ans(n−k)种,此时的答案为ans(k−1)∗ans(n−k)ans(k-1)*ans(n-k)ans(k−1)∗ans(n−k),又因为最后出栈的元素有nnn种可能,因此答案为

ans(n)=∑i=1n[ans(i−1)∗ans(n−i)]ans(n)=\sum_{i=1}^{n}[ans(i-1)*ans(n-i)]ans(n)=∑i=1n​[ans(i−1)∗ans(n−i)]

ans[0] = ans[1] = 1;
for(int i=2; i<=n; i++){
    ans[i] = 0;
    for(int j=1; j<=i; j++){
        ans[i] += ans[j-1]*ans[i-j];
    }
}
1
2
3
4
5
6
7

ansansans即为卡特兰数

# 卡特兰数

由引入得卡特兰数满足以下递推式

h0=h1=1h_0=h_1=1h0​=h1​=1

hn=h0hn−1+h1hn−2+...+hn−1h0h_n=h_0h_{n-1}+h_1h_{n-2}+...+h_{n-1}h_0hn​=h0​hn−1​+h1​hn−2​+...+hn−1​h0​

卡特兰数的一般项公式为:

hn=1n+1C2nn=(2n)!(n+1)!n!h_n=\frac{1}{n+1}C_{2n}^n=\frac{(2n)!}{(n+1)!n!}hn​=n+11​C2nn​=(n+1)!n!(2n)!​

hn=C2nn−C2nn+1h_n=C_{2n}^{n}-C_{2n}^{n+1}hn​=C2nn​−C2nn+1​

递推公式:

hn=hn−1(4n−2)n+1h_n=\frac{h_{n-1}(4n-2)}{n+1}hn​=n+1hn−1​(4n−2)​

# hn=C2nn−C2nn+1h_n=C_{2n}^{n}-C_{2n}^{n+1}hn​=C2nn​−C2nn+1​的证明

参考博客 (opens new window)

设操作1使得y值+1,操作2使得y值-1,两操作均能使x值加1。

从2n步中任取n步为操作1,则共有C2nnC_{2n}^{n}C2nn​中走法

下面讨论不合法的情况:

设跨越y=0的操作序列不合法,那么不合法的情况肯定存在一点k与y=-1相交

我们将k+1到2n的所有操作翻转(1变2,2变1)。那么该该序列最终会到达点(2n, -2)

由于翻转操作是对称的,因此不合法的情况相当于(n-1个操作1,n+1个操作2)的不同序列数

# 例题

# HDU 4828 (opens new window)

考虑1到2n,若放在上面一排则为0,否则为1,那么方案可以表示为01序列

显然是一道卡特兰数的模板题

# HDU 1133

# 应用

引自OI-Wiki (opens new window)

以下问题属于 Catalan 数列:

  1. 有 2n 个人排成一行进入剧场。入场费 5 元。其中只有 n 个人有一张 5 元钞票,另外 n 人只有 10 元钞票,剧院无其它钞票,问有多少中方法使得只要有 10 元的人买票,售票处就有 5 元的钞票找零?
  2. 一位大城市的律师在她住所以北 n 个街区和以东 n 个街区处工作。每天她走 2n 个街区去上班。如果他从不穿越(但可以碰到)从家到办公室的对角线,那么有多少条可能的道路?
  3. 在圆上选择 2n 个点,将这些点成对连接起来使得所得到的 n 条线段不相交的方法数?
  4. 对角线不相交的情况下,将一个凸多边形区域分成三角形区域的方法数?
  5. 一个栈(无穷大)的进栈序列为 1, 2, 3, ..., n 有多少个不同的出栈序列?
  6. n 个结点可够造多少个不同形态的二叉树(注:结点两两不可分)?
  7. n 个不同的数依次进栈,求不同的出栈结果的种数?
  8. n 个 +1 和 n 个 -1 构成 a1, a2, a3, ... an 项 ,其部分和满足 a1 + a2 + ... + a_k >=0 对与 n 该数列为?
上次更新: 2021/02/24, 03:37:30
二次剩余学习笔记
同余最短路学习笔记

← 二次剩余学习笔记 同余最短路学习笔记→

最近更新
01
深入理解Java虚拟机
03-04
02
DNS工作原理
02-27
03
改用VuePress啦
02-23
更多文章>
Theme by Vdoing | Copyright © 2019-2021
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式