卡特兰数(Catalan number)是 组合数学 中一个常出现在各种 计数问题 中的 数列。
公式
公式一:s(n)= s(0)*s(n-1)+s(1)*s(n-2) + ... + s(n-1)s(0) (n>=2)
公式二:s(n)=s(n-1)*(4*n-2)/(n+1)
公式三:s(n)=C(2n,n)/(n+1) (n=0,1,2,...)
公式四:s(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...
http://「算法入门笔记」卡特兰数 - 力扣(LeetCode)的文章 - 知乎 https://zhuanlan.zhihu.com/p/97619085
经典例题
P1044 [NOIP2003 普及组] 栈 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
ac代码
#include<bits/stdc++.h>
#define N 20
#define ll long long
using namespace std;
int n;
int c[N*2][N];
int main(){
cin>>n;
for(int i=1;i<=2*n;i++)
{
c[i][0]=c[i][i]=1;//根据组合数知识得出
for(int j=1;j<i;j++)
{
c[i][j]=c[i-1][j]+c[i-1][j-1];//组合数递推公式
}
}
cout<<c[2*n][n]-c[2*n][n-1];//公式四
return 0;
}