卡特兰数Catalan——定义、公式、模型总结
推荐:卡特兰数总结
定义:

f(i)表示,从(0,0)出发,到(i,i),每次只能向上或者向右走,并且不越过红线的方案数。
这个图片的点上的数字,其实告诉我们f[i],就可以根据这个n方dp得到。
其实是由这个阶梯推过来的。
也是之后的经典模型
公式:
来自百度百科
定义式:

为什么是对的?考虑第一次走到(y=x)的情况大概图长这样:中间空出一行为了强制必须向上走

这个式子是n^2的,太low了。
h(n)=c(2n,n)-c(2n,n-1)(n=0,1,2,...)
这个式子推法:

从A到目标点C(n,n)的方案数有:
C(2*n,n),即从2*n步中,选择n步向上走的方案数。
那么,我们不能超过绿线y=x,就意味着不能触碰红线y=x+1
发现,刚才每一个非法的方案数中,如果把碰到红线和碰到红线之前的路径,关于红线对称一下,碰到红线之后的路径不用管,
一定是一个从B点,即(-1,1)出发到C的方案。

黄线是一个不合法的方案,黄线在红线之前的部分,对称成灰色的路径,再和红色之后的黄色路径拼在一起,就是一个从B开始到C的路径。
发现,这个还是 一 一对应的!!
从B到C的方案是:C(2*n,n-1)
所以,从A到C的合法方案,就是f[n]=C(2*n,n)-C(2*n,n-1)
h(n)=C(2n,n)/(n+1) (n=0,1,2,...)
这个把上面的公式组合数展开化简即可。
模型与例题
答案通常与卡特兰数第k项直接相关。
1.火车进栈
这是一个卡特兰数经典入门题目。
直接输出h[n]
我们假设最后出栈的是k
那么k之前的所有数都进栈出栈了。k之后所有数也都进栈出栈了
k两边就是两个互相独立的子问题。
方案是:a[n-k]*a[k-1],又因为k可以取到1~n的任何数。
所以根据加法原理,a[n]=a[n-1]*a[1]+a[n-2]*a[2]+...a[1]*a[n-1]
就是卡特兰数的递推式子了。
也可以这样想,一节车厢进栈,代表向右走,出栈,代表向左走,
因为不存在一个时刻,出栈的总次数大于进栈的总次数。
恰好和从(0,0)到(n,n)不越过y=x方案数一致。
这个模型也证明了卡特兰数的两个公式其实是统一的。
2.合法括号序列 牛客网NOIP赛前集训营-普及组(第二场)
长度为2k的合法括号序列有 h[k]个。
证明:把左括号抽象为向右走,右括号抽象为向上走,
然后同上可以证明了。
其实是火车进栈的抽象版本。
牛客9.16普及组T4
3.0/1走
即每次向右走,或者向上走,不越过y=x的方案数。
这就是卡特兰数基本定义模型了。
对于类似必须越过y=x至少一次,就是不合法的C(2n,n-1)了
对于恰好越过一次,其实也是C(2n,n),相当于第一次碰到绿线之后的路径关于绿线对称过去,还是一样的。
但是可能边界考虑减一减。
4.凸包三角形划分。
留坑。
5.n个点二叉树不同形态方案数。
假设根左子树大小为k-1个,右子树大小为n-k个
那么,这种情况下的方案数就是a[k-1]*a[n-k]
因为k可以取1~n,所以,
就是之前的a[n]=a[n-1]*a[1]+a[n-2]*a[2]+...a[1]*a[n-1]了。
6.阶梯

用n个矩形完全不重叠覆盖n阶阶梯方案数。
发现,左下角一定会被一个矩形覆盖(废话)
这个矩形假设左上有k-1个矩形,右下有n-k个矩形,(或者说分成了两个子问题的小阶梯形)
那么,这种情况下的方案数就是a[k-1]*a[n-k]
因为k可以取1~n,所以,
就是之前的a[n]=a[n-1]*a[1]+a[n-2]*a[2]+...a[1]*a[n-1]了。
总结:
①会推:那就推。
一般从两个方面的模型考虑:
1.
是否可以得出这个式子。、
2.
是否能够转化成这个图的模型问题。
②不会?那就打表找规律咯。。。。
记住前几项:1,1,2,5,14,42(第0项开头)
然后可以再尝试证明、
另类:施罗德数
卡特兰数Catalan——定义、公式、模型总结的更多相关文章
- 【知识总结】卡特兰数 (Catalan Number) 公式的推导
卡特兰数的英文维基讲得非常全面,强烈建议阅读! Catalan number - Wikipedia (本文中图片也来源于这个页面) 由于本人太菜,这里只选取其中两个公式进行总结. (似乎就是这两个比 ...
- 卡特兰数 Catalan数 ( ACM 数论 组合 )
卡特兰数 Catalan数 ( ACM 数论 组合 ) Posted on 2010-08-07 21:51 MiYu 阅读(13170) 评论(1) 编辑 收藏 引用 所属分类: ACM ( 数论 ...
- 浅谈卡特兰数(Catalan number)的原理和相关应用
一.卡特兰数(Catalan number) 1.定义 组合数学中一个常出现在各种计数问题中出现的数列(用c表示).以比利时的数学家欧仁·查理·卡特兰的名字来命名: 2.计算公式 (1)递推公式 c[ ...
- 卡特兰数 Catalan 笔记
一.公式 卡特兰数一般公式 令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>= ...
- 卡特兰数 catalan number
作者:阿凡卢 出处:http://www.cnblogs.com/luxiaoxun/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留 ...
- ACM数论-卡特兰数Catalan
Catalan 原理: 令h(0)=1,h(1)=1,catalan 数满足递归式: (其中n>=2) 另类递推公式: 该递推关系的解为: (n=1,2,3,...) 卡特兰数的应用实质上都是递 ...
- 【2020.12.01提高组模拟】卡特兰数(catalan)
题目 题目描述 今天,接触信息学不久的小\(A\)刚刚学习了卡特兰数. 卡特兰数的一个经典定义是,将\(n\)个数依次入栈,合法的出栈序列个数. 小\(A\)觉得这样的情况太平凡了.于是,他给出了\( ...
- 卡特兰数(Catalan Number) 学习笔记
一.三个简单的问题 1.给定一串长为2n的01序列,其中0和1的数量相等,满足任意前缀中0的个数不少于1的个数,求序列的个数 2.给出一串长为n的序列,按顺序将他们进栈,随意出栈,求最后进出栈的方案 ...
- 卡特兰数 (Catalan)
卡特兰数:(是一个在计数问题中出现的数列) 一般项公式: 1. 或 2. 递归公式: 1. 或 2. 注:全部可推导. (性质:Cn为奇数时,必然出现在奇数项 2k- ...
随机推荐
- sqli-labs学习笔记 DAY7
DAY7 sqli-labs阶段总结 基本步骤 判断是否报错 判断闭合符号 判断注入类型 构建payload 手工注入或者编写脚本 基本注入类型 报错型注入 floor公式(结果多出一个1):and ...
- OO终章--总结博客
一.测试与正确性论证的比较 从方法上看,测试是使用大量测试样例来覆盖测试代码,从而能够检测代码的实现是否正确,功能是否完善.而正确性论证是使用代码的规格和逻辑进行严密的推论和证明,从而验证代码的实现正 ...
- java实验1实验报告(20135232王玥)
实验一 Java开发环境的熟悉 一.实验内容 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 二.实验要求 1.没有Linux基础的同学建议先 ...
- web窗体之四则运算
1,计算方法: namespace ASP.NET { public class JiSuan { public int S; public int Result { get { return S; ...
- 2018软工实践—Beta冲刺(5)
队名 火箭少男100 组长博客 林燊大哥 作业博客 Beta 冲鸭鸭鸭! 成员冲刺阶段情况 林燊(组长) 过去两天完成了哪些任务 协调组内工作 协助数据库完善搭建 展示GitHub当日代码/文档签入记 ...
- java中static使用之静态方法注意点
1.静态方法可以直接调用同类中的静态成员,但是不能直接调用非静态成员,这是为什么呢?大家想一下,静态成员在对象创建之前就要写入内存,所以它在内存中是实实在在的存在的,而非静态还不存在内存中,所以不能调 ...
- 【Coursera】线性回归和逻辑回归
一.线性回归 1.批量梯度下降法 每次对参数进行一次迭代时,都要扫描一遍输入全集 算法可以收敛到局部最优值 当迭代多次之后,每次迭代参数的改变越小 2.随机梯度下降法 对于一个输入样本,对参数进行一次 ...
- SGU 223 little kings BSOJ2772 状压DP
1896 [SCOI2005]互不侵犯King [问题描述]在n*n(1<=n<=10)的棋盘上放k(0<=k<=n*n)个国王(可攻击相邻的8 个格子),求使它们无法互相攻击 ...
- BETA-6
前言 我们居然又冲刺了·六 团队代码管理github 站立会议 队名:PMS 530雨勤(组长) 过去两天完成了哪些任务 新方案代码比之前的更简单,但是对场景的要求相应变高了,已经实现,误差感人 代码 ...
- 网桥 以及 IEEE802.1D 生成树协议
(一)网桥 网桥是一个layer 2设备,能够连接两个不同的网段. 如图