首页 > 其他分享 >卡特兰数(Catalan)

卡特兰数(Catalan)

时间:2024-07-30 20:51:22浏览次数:16  
标签:括号 int 50 Catalan 100 卡特兰 dp

1.简介:

卡特兰数是组合数学中一个常出现于各种计数问题中的数列。

十以内的卡特兰数,方便打表找规律,稍微记记。
1 2 5 14 42 132 429 1430 4862 16796

2.catalan递推式子

(1)

点击查看代码
#include<bits/stdc++.h>
using namespace std;

#define int long long
const int N=1e5+100;
const int mod=1e9+7;
int n;
int dp[N];
void Catalan(int n)
{
	dp[0]=1;dp[1]=1;
	for(int j=2;j<=n;j++)
	{
		for(int i=0;i<j;i++)
		{
			(dp[j]+=dp[i]*dp[j-1-i]%mod)%=mod;
		}
	}
}

signed main()
{
	scanf("%lld",&n);Catalan(n);
	for(int i=1;i<=n;i++)
	printf("%lld\n",dp[i]);
}
(2)

3.适用范围

(1)括号匹配

数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且有效的括号组合。

类似的,再来看一道例题:

买卖找零问题:

售票处售卖球票,每张票 50 元。有2n人前来买票

其中一半人手持 50 元钞票
另一半人手持 100 元钞票
若售票处开始没有任何零钱,问:有多少种排队方式,能够让售票顺畅进行。

思路:

把手持 50 元钞票的人视为左括
把手持 100 元钞票的人视为右括号
左右括号合法配对,即先出现左括号,再出现右括号,就可以让售票顺畅执行

可以看到,问题又变成了求解 n 的卡特兰数

(2)出栈顺序

一个栈(无穷大)的进栈序列为1,2,3,…,n,有多少个不同的出栈序列?

(3)凸多边形三角划分

在一个凸多边形中,通过若干条互不相交的对角线,把这个多边形划分成了若干个三角形。任务是键盘上输入凸多边形的边数n,求不同划分的方案数f(n)。比如当n=6时,f(6)=14。

(4)给定节点组成二叉搜索树

给定N个节点,能构成多少种不同的二叉搜索树。

标签:括号,int,50,Catalan,100,卡特兰,dp
From: https://www.cnblogs.com/zhengchenxi/p/18333335

相关文章

  • 卡特兰数和斯特林数
    感觉这几个东西挺常用,记录一下吧。1.卡特兰数假如我们定义\(C_n\)表示第\(n\)个卡特兰数。然后我们就有一下几个式子。\(C_n=\dfrac{\dbinom{2n}{n}}{n+1}\)\(C_n=\begin{cases}\sum^n_{i=1}H_{i-1}H_{n-i}\\n\ge2\\1\end{cases}\)\(C_n=\dbin......
  • 卡特兰数
    卡特兰数:其对应序列为:\(H_0\)\(H_1\)\(H_2\)\(H_3\)\(H_4\)\(H_5\)\(H_6\)\(H_7\)\(\cdots\)\(H_n\)11251442132429\(\cdots\)\(\frac{C_{2n}^n}{n+1}\)\(H_n\begin{cases}\sum_{i=1}^nH_{i-1}\timesH_{n-i}\n......
  • hdu1134卡特兰数
    简单卡特兰数题,卡特兰序列:1,1,2,5,14,42,132,429,1430·············递推式f(n)=f(n-1)*(4n-2)/(n+1) importjava.math.BigInteger;importjava.util.Scanner;publicclasshdu1134{publicstaticvoidmain(String[]args){//TODO自动生成的方......
  • 【数学】组合数学 - 卡特兰数
    父级页面:【数学】组合数学卡特兰数记号为\(H_n\)第n个卡特兰数,下面的n就是指这个。\(H_0=1,H_1=1,H_2=2,H_3=5,H_4=14,H_5=42\)卡特兰数最常见的场景是合法的括号序,还有栈进出的方案。他们的特点就是“右括号”、“出栈”的次数不能超过剩余的“左括号”、“入栈”的次......
  • 卡特兰数
    卡特兰数一、计算公式\(C_1=1\),\(C_n=C_{n-1}\frac{4n-2}{n+1}=C_{2n}^{n}-C_{2n}^{n+1}=\frac{C_{2n}^n}{n+1}\)二、应用场景场景1n个元素进栈序列为:1,2,3,4,...,n,则有多少种出栈序列?将进栈表示+1,出栈表示为-1。要想是合法序列,则+1的数量要大于......
  • 卡特兰数、Prüfer 序列、BSGS
    1卡特兰数1.1概述卡特兰数的前几项是$1,1,2,5,14,42,132,429,1430,4862\cdots$。卡特兰数在组合数学中有着许多应用。下面给出一个经典例子:在网格中向右或向上走,从$(0,0)$走到$(n,n)$,并且不能越过对角线的路径条数。该问题的结果就是卡特兰数,记为$H_n$。1.2通项公......
  • 卡特兰数
    为区别于组合数,用\(Cat(n)\)代表卡特兰数的第n项是一种数列,其通项公式的一种形式为:\(Cat_n=\frac{1}{n+1}\timesC_{2n}^{n}(n=0,1,2...)\)前几项数值为\(1,1,2,5,14,42,132,429\)增长幅度为\(O(4^n)\)递归定义式1\(Cat_n=\sum_{i=0}^{n-1}Cat_i\timesCat_{n-i-1}\)理解:......
  • 卡特兰数小记
    引入\(n\)个节点的二叉树个数。长度为\(2n\)的合法括号序列数量。不加说明的给出结论:上面两个问题的答案均为卡特兰数列\(H\)的第\(n\)项,\(H_n\)。暴力DP理解第一个问题设DP状态\(f(i)\)为\(i\)个节点的二叉树个数。求\(f(i)\)时,枚举左儿子节点数量\(j......
  • 关于卡特兰数
    不那么有意思的定义卡特兰数\(\big(Catalan\big)\)用\(H\)来表示,有形式如:\(H_n=\dfrac{\binom{2n}n}{n+1}(n\geq2)\)很好,你已经知道定义了。老师说:它是栈出栈入栈的\(方案数\)\(???\)放到一个递推式就有了:\(H_n=\begin{cases}H_{n-1}+H_{n-2}&\text{if}......
  • CF-1831-E-卡特兰数+异或哈希+差分
    1831-E题目大意给定一个整数\(n\),和\(k\)个区间,区间端点范围在\([1,n]\)内。如果有一个长为\(n\)合法的括号序列,且它的这\(k\)个区间\([l,r]\)中的子括号序列也是合法的,那么称这个括号序列是“好的”。请你求出有多少个长度为\(n\)的“好的”括号序列,答案对\(998244353\)取模......