卡特兰数

卡特兰数

性质:

h(n)表示第n项,h(0)-1,h(1)=1;
公式一:h(n)= h(0)h(n-1)+h(1)h(n-2) + … + h(n-1)h(0) (n>=2)
公式二: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,…)

应用:

  • 求长度为2*n的01序列中(n个1,n个0),长度为k的字符串中(前缀),1的个数不少于0的个数。
    相类似,也可以把1的个数换为n,0的个数换为m。
    洛谷P1641 [SCOI2010]生成字符串

  • n个+1,n个-1构成的前缀和不小于1的序列数。(和01序列一致)

  • 基础模型:求n个数进栈出栈的方案数。

  • n个节点,可以构成多少二叉树。

  • n个分支节点,不同构的满二叉树的个数。

  • 括号化问题。左括号和右括号各有n个,求合法的括号表达式。

  • n+1个数相乘,不能改变数的顺序,可以通过加括号改变,求多少种方式。(转化为括号化问题)
    -n个5元,n个10元,买一张票需要5元,问多少种方式可以不用增加5元的数量进行找零。(转化为进栈出栈)

  • 在圆上选择2*n个点用线段两两连接起来,求使n条线段不相交的方案数。(转化为进栈出栈)

  • 凸边形的三角形划分:用若干条互不相交的对角线将一个n边形化为多个三角形,求方案数。

  • 在边长为n的正方形表格中,从(1,1)到(n,n)不越过对角线(可以经过),求方案数。(也可改为n*m)
    n*m表格

  • P3200 [HNOI2009]有趣的数列

  • 洛谷P2532 [AHOI2012]树屋阶梯

简单证明:

以进栈出栈方案数为例:

  • 我们设f(n)=序列个数为n的出栈序列种数。我们假定,最后出栈的元素为k,显然,k取不同值时的情况是相互独立的,也就是求出每种k最后出栈的情况数后可用加法原则,由于k最后出栈,因此,在k入栈之前,比k小的值均出栈,此处情况有f(k-1)种,而之后比k大的值入栈,且都在k之前出栈,因此有f(n-k)种方式,由于比k小和比k大的值入栈出栈情况是相互独立的,此处可用乘法原则,f(n-k)*f(k-1)种,求和便是Catalan递归式。
  • 另一种理解:(转化为01序列)
    对于每一个数来说,必须进栈一次、出栈一次。我们把进栈设为状态‘1’,出栈设为状态‘0’。n个数的所有状态对应n个1和n个0组成的2n位二进制数。由于等待入栈的操作数按照1‥n的顺序排列、入栈的操作数b大于等于出栈的操作数a(a≤b),因此输出序列的总数目=由左而右扫描由n个1和n个0组成的2n位二进制数,1的累计数不小于0的累计数的方案种数。
    在2n位二进制数中填入n个1的方案数为c(2n,n),不填1的其余n位自动填0。从中减去不符合要求(由左而右扫描,0的累计数大于1的累计数)的方案数即为所求。
    不符合要求的数的特征是由左而右扫描时,必然在某一奇数位2m+1位上首先出现m+1个0的累计数和m个1的累计数,此后的2(n-m)-1位上有n-m个 1和n-m-1个0。如若把后面这2(n-m)-1位上的0和1互换,使之成为n-m个0和n-m-1个1,结果得1个由n+1个0和n-1个1组成的2n位数,即一个不合要求的数对应于一个由n+1个0和n-1个1组成的排列。
    反过来,任何一个由n+1个0和n-1个1组成的2n位二进制数,由于0的个数多2个,2n为偶数,故必在某一个奇数位上出现0的累计数超过1的累计数。同样在后面部分0和1互换,使之成为由n个0和n个1组成的2n位数,即n+1个0和n-1个1组成的2n位数必对应一个不符合要求的数。
    因而不合要求的2n位数与n+1个0,n-1个1组成的排列一一对应。
    显然,不符合要求的方案数为c(2n,n+1)。由此得出输出序列的总数目=c(2n,n)-c(2n,n-1)=c(2n,n)/(n+1)=h(n)。
    参考代码:
    卡特兰数
    卡特兰数
    百度百科
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值