首页 > 其他分享 >卡特兰数

卡特兰数

时间:2023-04-07 21:12:00浏览次数:45  
标签:方案 cdot dfrac int 2n 红线 卡特兰

卡特兰数

问题

给定 \(n\) 个 \(0\) 和 \(n\) 个 \(1\),它们将按照某种顺序排成长度为 \(2n\) 的序列,它们能排列成的所有序列中,能够满足任意前缀序列中 \(0\) 的个数都不少于 \(1\) 的个数的序列有多少个?

转化

我们将上面的问题进行转化:

image

问:从 \((0, 0)\) 点走到 \((n, n)\) 点,且只能向右或向上走,共有多少种方案?

如果向右走一格,记为 \(0\),如果向上走一格,记为 \(1\)。因此,每一条路径都对应一个 \(01\) 序列。

将这个问题进行转化后,我们还需要增加一个条件 : 保证在任意时刻,满足 \(x \ge y\)。

所以,我们对这个问题进行更严谨的描述:

从 \((0, 0)\) 点走到 \((n, n)\) 点,且只能向右或向上走,且在任意时刻,满足 \(x \ge y\),共有多少种方案?

将问题转化后,我们得到了一个与原题不同,但结果一致的问题。

由于每个时刻点的坐标要保证 \(x \ge y\),所以我们可以进一步的分析:

image

在任意时刻,所走过的路径不得碰到红线。

求解

对于这个问题,可以反过来思考,也就是求出经过红线的路径数量,再用总方案数减掉这些路径。

总方案数

从 \((0, 0)\) 点走到 \((n, n)\) 点,只能向右或向上走,也就是一共要向右走 \(n\) 步,向上走 \(n\) 步,一共要走 \(2n\) 步。其中向上走的 \(n\) 步可以在 \(2n\) 步中任意走。所以从 \((0, 0)\) 点走到 \((n, n)\) 点,只能向右或向上走的总方案数就是 \(C_{2n}^n\)。

经过红线的方案数

假如走过的路径如下图:

image

图中第一次碰到红线的点是 \((3, 4)\),那么将 \((3, 4)\)后面的点对于红线做轴对称,即:

image

那么此时的终点从 \((6, 6)\) 变到了 \((5, 7)\)。

也就是说,从 \((0, 0)\) 点走到 \((6, 6)\) 点,只能向右或向上走,且碰到红线的方案数 等于 从 \((0, 0)\) 点走到 \((5, 7)\) 点的总方案数。

根据上面从 \((0, 0)\) 到 \((n, n)\) 的推导,从 \((0, 0)\) 到 \((5, 7)\) 的方案数即 \(C_{5+7}^7\),带入字母也就是 \(C_{(n-1) + (n+1)}{n+1}\),化简即 \(C_{2n}^{n+1}\)。

结论

至此,总方案数和经过红线的方案数都推导完毕,那么最开始的问题也就是

\[C_{2n}^{n} - C_{2n}^{n+1} \]

对其进行化简:

\(\ \ \ C_{2n}^{n} - C_{2n}^{n+1}\)

\(= \dfrac{(2n)!}{(n!)\cdot (n!)} - \dfrac{(2n!)}{(n-1)! \cdot (n + 1) !}\)

\(= \dfrac{(2n)! \cdot (n+1) - (2n)! \cdot n}{(n+1)! \cdot n}\)

\(= \dfrac{(2n)!}{(n+1)!\cdot (n!)}\)

\(= \dfrac{1}{n+1} \cdot \dfrac{(2n)!}{(n!)\cdot (n!)}\)

\(= \dfrac{C_{2n}^n}{n+1}\)

代码

int C(int n, int m){
    int res = 1;
    for(int i=n; i>n-m; i--){
        res = mul(res, i);
    }
    for(int i=1; i<=m; i++){
        res = mul(res, fpm(i, mod - 2));
    }
    return res;
}

int catalan(int n){
    return mul(C(2*n, n), fpm(n + 1, mod - 2));
}

相关题目

[NOIP2003 普及组] 栈

矩阵 II

鸡蛋饼

球迷购票问题

小猫

标签:方案,cdot,dfrac,int,2n,红线,卡特兰
From: https://www.cnblogs.com/2huk/p/17297337.html

相关文章

  • 数学知识3.2-卡特兰数
    一、卡特兰数卡特兰数:\(C_{2n}^{n}-C_{2n}^{n+1}=\frac{C_{2n}^{n}}{n+1}\)。卡特兰数满足递推公式:设\(C_n=\frac{C_{2n}^{n}}{n+1}\),\(C_1=1\),\(C_n=C_{n-1}\frac{4n-2......
  • 关于卡特兰数的若干讨论
    去年清明写的,现在补个档。基于序列的卡特兰数通项公式推导​ 卡特兰数可认为是一个长度为\(2n\)的合法栈序列之集合的势。换言之,亦即所有长度为\(2n\)的仅由\(-1\)......
  • 卡特兰数学习笔记
    参考了这篇博客引入\(n\)个元素进栈序列为:\(1,2,3,4...n\),求总共有多少种出栈序列。将进栈表示为\(+1\),出栈表示为\(-1\),则\(1,3,2\)的出栈序列可以表示为:\(+1,-1,......
  • HDU/HDOJ 2067 小兔的棋盘 DP/卡特兰数
    HDU/HDOJ2067小兔的棋盘小兔的棋盘TimeLimit:1000/1000MS(Java/Others)    MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):12782    Acce......
  • 卡特兰数
    卡特兰数:$C(n)=\binom{2n}{n}-\binom{2n}{n+1}=\frac{\binom{2n}{n}}{n+1}$几何表示:卡特兰数表示从点O到点A,只能向上或向右走蓝色线段的方案数,即从点O到点A,只能向上或......
  • 卡特兰数
    一、背景与定义       1.背景       Catalan,Eugene,Charles,卡特兰(1814~1894)比利时数学家,生于布鲁日(Brugge),早年在巴黎综合工科学校就读。1856年任列日(Liege......
  • 卡特兰数(Catalan number)
    Catalan数列目录目录Catalan数列目录定义Number说明表示1.递推定义2.递推关系3.通项公式4.通项公式II证明1.公式42.公式13.公式34.公式2证毕推荐链接定义Numbe......
  • 高斯消元+组合数+卡特兰数
    高斯消元+组合数+卡特兰数高斯消元\(O(n^3)\)的线性时间内求解n元线性方程组\[\\\begin{cases}\a_{11}x_1+a_{12}x_2+...+a_{1n}x_n=b_1\\\a_{21}x_1+a_{22}x_2+.......
  • 【数据结构-栈】卡特兰数
    目录卡特兰数公式出栈序列数二叉树形态数卡特兰数公式f(n)=C(2n,n)/(n+1)计算用途:二叉树形态数,出栈序列数出栈序列数【例1】3个不同元素依次进栈,能得到多少种......
  • 卡特兰数
    具体的讲解和例子参考这篇博客,讲的很清楚在这里主要说下分解成子问题时候的注意事项对于作者提到的2k位置首次出现第一次1的个数等于0的个数的情况,为什么子问题不能分解......