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

卡特兰数

时间:2023-07-07 20:35:01浏览次数:41  
标签:frac int 向右走 Longrightarrow 2n 卡特兰

卡特兰数

  • 定义
    卡特兰数非常常见,最为典型的就是给定n个1和n个0排列成为一个2n长度的01序列,要求对于任一个\(1\le k\le 2n\)都有从第一个数到第k个数中0的个数都不少于1的个数。
  • 求法及其推导
    我们可以把这个01序列抽象成一个具体的问题:
    0代表向右走一步,1代表向上走一步,要求一共向右走n步向上走n步对于任一时刻向右走的步数都大于向上走的步数,最终到达(n,n)。
    我们不难发现y=x是一个分界点,如果走的路线全部都在y=x(图中绿线)的下方或者只是碰到y=x并未越过它则符合条件,当且仅当路线与y=x+1(图中红线)有交点不符合条件。
    输入图片说明
    设不符合条件的路径与红线的第一个交点为t,
    输入图片说明
    这里有一系列逻辑推导关系:\(一个路径是不合法路径\Longrightarrow 它与红线有一个交点t\Longrightarrow 这条路径t点之后的步数里向右走要比向上走多一步\Longrightarrow将t之后的路径沿着红线翻转后向上走要比向右走多两步\Longrightarrow 翻转后一定到达(n-1,n+1)点\),因为到达(n-1,n+1)点一定会穿过红线那么就有:所有非法路径的条数等于到(n-1,n+1)的条数。即为:\(C_{2n}^{n}-C_{2n}^{n-1}=\frac{(2n)!}{n!n!}-\frac{(2n)!}{(n-1)!(n+1)}=\frac{(2n)!(n+1)}{(n+1)!n!}-\frac{(2n)!n}{n!(n+1)!}=\frac{2n!}{(n+1)!n!}=\frac{1}{n+1}*\frac{2n!}{n!n!}=\frac{1}{n+1}C_{2n}^{n}\),所以卡特兰数为:\(\frac{C_{2n}^{n}}{n+1}\)
    -代码实现
    给定n个0和n个1,求卡特兰数,结果模上\(10{^9}+7\)
#include<iostream>

using namespace std;
typedef long long  LL;
const int N=2e5+10;
const int mod=1e9+7;
int fact[N],infact[N];
int qmi(int a,int b,int p)
{
    int res=1;
    while(b)
    {
        if(b&1)
        {
            res=(LL)res*a%p;
        }
        b>>=1;
        a=(LL)a*a%p;
    }
    return res;
}
int main()
{
    int n;
    cin>>n;
    int a=2*n,b=n;
    fact[0]=infact[0]=1;
    for(int i=1;i<=a;i++)
    {
        fact[i]=(LL)fact[i-1]*i%mod;
        infact[i]=(LL)infact[i-1]*qmi(i,mod-2,mod)%mod;
    }
    int res=(LL)fact[a]*infact[b]%mod*infact[b]%mod*qmi(n+1,mod-2,mod)%mod;
    printf("%d",res);
    return 0;
}

标签:frac,int,向右走,Longrightarrow,2n,卡特兰
From: https://www.cnblogs.com/Taco-gu/p/17535988.html

相关文章

  • 浅谈斐波那契数列和卡特兰数
    斐波那契数列斐波那契数列是我们较为熟悉的一类数列了,在学习递归和递推的时候我们就已经能求解\(n\)较小的情况了;斐波那契数列的定义如下:\[\left\{\begin{matrix}F_{n}=0&n=0\\F_{n}=1&n=1\\F_{n}=F_{n-1}+F_{n-2}&n\ge2\end{matrix}\right.\]卢卡斯数列卢卡斯数列......
  • (hdu step 2.3.8)小兔的棋盘(卡特兰数:从左上角走到右上角的路径数)
    题目:     小兔的棋盘TimeLimit:1000/1000MS(Java/Others)MemoryLimit:32768/32768K(Java/Others)TotalSubmission(s):802AcceptedSubmission(s):502ProblemDescription小兔的叔叔从外面旅游回来给她带来了一个礼物,小兔高兴地跑回自己的房间,拆开一看是......
  • 已知n个数的入栈序列,求一共有多少种出栈序列 (卡特兰数)
    已知\(n\)个数的入栈序列,求一共有多少种出栈序列这个经典问题有两种解法。解法一:设\(f(x)\)为\(x\)个数入栈后,再全部出栈的序列数量假设我们有\(4\)个数\(a,b,c,d\),我们来看\(a\)的出栈顺序.假如\(a\)第一个出栈,那么后面还有\(3\)个数没有出栈,因此方法数是\(f(3)\).假设\(......
  • 卡特兰数
    卡特兰数问题给定\(n\)个\(0\)和\(n\)个\(1\),它们将按照某种顺序排成长度为\(2n\)的序列,它们能排列成的所有序列中,能够满足任意前缀序列中\(0\)的个数都不少于\(1\)的个数的序列有多少个?转化我们将上面的问题进行转化:问:从\((0,0)\)点走到\((n,n)\)点,且只......
  • 数学知识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......