卡特兰数

卡特兰数:1,1,2,5,14,42,132,429...

通项:

递推式:h(n)= h(0)*h(n-1)+h(1)*h(n-2) + ... + h(n-1)h(0) (n>=2)

代码:

void Catalan(){
	f[0] = f[1] = 1;
	for(int i=2;i<N;i++){
		f[i] = 0;
		for(int j=0;j<=i;j++)
			f[i] += f[j]  * f[i-j-1];
	}
}

模型求解:

  1. 出栈次序
    • 设x为当前出栈序列的最后一个,则x有n种取值。

    • 由于x是最后一个出栈的,所以可以将已经出栈的数分成两部分:比x小,比x大。

    • 比x小的数有x-1个,所以这些数的全部出栈可能为f[x-1]

    • 比x大的数有n-x个,所以这些数的全部出栈可能为f[n-x]

    • 这两部分互相影响,所以一个x的取值能够得到的所有可能性为f[x-1] * f[n-x]

    • ans = f[0]*f[n-1] + f[1]*f[n-2] + ... + f[n-1]*f[0]

  2. 合法的括号序列
    • 左右括号分别对应入栈和出栈
  3. 不经过对角线的非降路径数
    • 右上分别代表出栈和入栈
  4. 二叉树个数
    • 确定根结点,左右个数划分T[x,n-1-x],x\epsilon [0,n-1]
  5. 凸多边形三角划分
    • P1Pn边为基准,随机找一点k\epsilon [2,n-1],构成三角形P1PnPk。则k把三角形分成CkCn-k+1
  6. 找零问题。有2n个人排成一行进入剧场。入场费 5 元。其中只有n个人有一张 5 元钞票,另外n人只有 10 元钞票,剧院无其它钞票,问有多少中方法使得只要有 10 元的人买票,售票处就有 5 元的钞票找零?
    • 设5为入栈,10为出栈 
  7. 圆上不相交。在圆上有2n个点,将这些点成对连接起来使得所得到的n条线段不相交的方法数?
    • 设基准点为A为0,则与A相连的点k必定为奇数编号点(否则无法一边会产生孤立点)。
    • 点k分n为两部分k-1n-k-1
    • f(n)=f(0)*f(n-2) + f(2)*f(n-4)+...+f(n-4)*f(2) + f(n-2)*f(0)
    • f(0) = 1, f(2) = 1, f(4) = 2。结合递归式,不难发现f(2n) =h(n)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值