卡特兰数(笔记)
发布日期:2021-05-07 03:06:27 浏览次数:34 分类:精选文章

本文共 935 字,大约阅读时间需要 3 分钟。

卡特兰数

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,…

2.公式

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)=c(2n,n)-c(2n,n+1)(n=0,1,2,…)

  • h(n)=C(2n,n)/(n+1)

3.应用

  • 进出栈的总序列个数问题

    假设k是最后一个出栈的数。比k早进栈且早出栈的有k-1个数,一共有h(k-1)种方案。比k晚进栈且早出栈的有n-k个数,一共有h(n-k)种方案。所以一共有h(k-1)h(n-k)种方案。k取不同值时,产生的出栈序列是相互独立的,所以结果可以累加。

    *k的取值范围为1至n,所以结果就为h(n)= h(0)*h(n-1)+h(1)*h(n-2) + … + h(n-1)h(0)。

在这里插入图片描述

在这里插入图片描述
本题可以直接打表卡特兰数,也可以直接公式求解,但是注意求组合数时s,x会爆,要及时约分。

#include
using namespace std;typedef long long ll;ll C(ll n,ll m){ ll s = 1,x = 1; ll ans = 0; for(int i=0;i
>n; cout<
  • 括号匹配匹配方式

    2*n个括号,必须是n个左括号,n个右括号,这样才能匹配。求有多少种匹配方式?

    假设n=2,只有()(),(())两种,答案就是卡特兰数

  • 二叉树的个数

    给定n个节点,求能构成二叉树的个数

  • 凸多边形的划分方案数

    凸多边形的三角形划分,一个凸的n边形,用直线连接它的两个顶点使之分成多个三角形,每条直线不能相交,求划分的方案数

上一篇:最长上升子序列(dp)(二分)
下一篇:每日一题-圆桌问题(约瑟夫问题)(vector)

发表评论

最新留言

感谢大佬
[***.8.128.20]2025年04月07日 13时26分32秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章