卡特兰数 洛谷 1044 栈

xiaoxiao2021-02-28  52

卡特兰数原理:

令h(0)=1,h(1)=1,catalan数满足递推式: h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)*h(0) (n>=2) 例如:h(2)=h(0)*h(1)+h(1)*h(0)=1*1+1*1=2 h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=1*2+1*1+2*1=5 另类递推式: h(n)=h(n-1)*(4*n-2)/(n+1); 递推关系的解为: h(n)=C(2n,n)/(n+1) (n=0,1,2,…) 递推关系的另类解为: h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,…)

卡特兰数前几项:

1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012, 742900, 2674440, 9694845, 35357670, 129644790, 477638700, 1767263190, 6564120420, 24466267020, 91482563640, 343059613650, 1289904147324, 4861946401452 卡特兰数

题目 洛谷 1044

题目描述的是求几个数字进栈出栈的序列,实际上就是卡特兰数。

源代码

#include<iostream> #include<cstdio> using namespace std; long long h[20]; int main(){ int n; scanf("%d",&n); h[0]=1;h[1]=1; for(int i=2;i<=n;i++)h[i]=h[i-1]*(4*i-2)/(i+1); cout<<h[n]; }
转载请注明原文地址: https://www.6miu.com/read-53805.html

最新回复(0)