卡特兰数
概念:
卡特兰数并不是一个确定的数,而是一类数,是组合数学中一种常出现于各种计数问题中的数列。它没有一个明确的定义,但可以通过一些模型得出关于卡特兰数的很多信息,下面介绍几个这样的问题。
问题/模型:
(一)路径问题
给定
的网格(上图是一个 的网格),初始你在左下角的格点 ,每次你只能往右或者往上走一格,且不能穿过对角线(图中的蓝线),走到 的方案数记作卡特兰数 。
考虑离开
可以发现,在卡特兰数的问题中,一般常有两种选择,需要保证其中一种选择的数量在任意前缀中不大于另一种选择的数量。将上面的例子代入,可以发现两种选择分别为向上走或向右走,需要保证向上走的步数不大于向右走的步数。因此,我们除了可以根据它推出递推式以外,还可以得到一个通项公式。
考虑一共走
化简,得到另一个通项公式:
整理,又可以得到另一个递推式:
(二)合法括号序列
两种选择分别为在当前位置上放左括号或右括号,要求保证在任何前缀中右括号的数量不大于左括号的数量。
(三)进出栈
两种选择分别为出栈和进栈,要求在操作的任何前缀保证出栈数量不大于进栈数量。
(四)凸多边形三角形划分
凸
(五)二叉树种类
(四)(五)两个问题,类比(一)路径问题即可。
总结:
以卡特兰数为背景的题目的一大特点就是常常有两种选择,并需要保证在前缀中一种选择的数量不大于另一种选择(emmm也许还有多种选择的题目,只是我们遇到过23333)。同时,以卡特兰数为背景的题目也可以用动态规划来解决?想一想,为什么?观察一下卡特兰数的递推式,不就是很像动态规划吗(
习题:
(一)HDU 5184 Brackets
我们给出“正则括号”序列的归纳定义:
●空序列是正则括号序列,
●如果s是正则括号序列,则是正则括号序列,
●如果和 是正则括号序列,则 是正则括号序列。
●没有其他序列是常规括号序列
例如,以下所有字符序列都是常规括号序列:
而以下字符序列不是:
现在我们要构造一个长度的常规括号序列,当前面已经给出了几个括号时,我们可以得到多少个常规括号序列。
首先判断原序列是不是合法,如果不合法,即出现了右括号数量比左括号多的情况或
设将原序列补充为一个正则括号所需要的右括号的个数为
让我们结合一下上面提到的模型(二)合法括号序列,容易发现,所要添加的总括号长度是
组合数要取模,逆元即可。
点击查看代码
(二)P3200 [HNOI2009]有趣的数列(?)
题目描述
我们称一个长度为的数列是有趣的,当且仅当该数列满足以下三个条件:
●它是从共 个整数的一个排列
●所有的奇数项满足所有的偶数项满足
●任意相邻的两项与 满足:
对于给定的,请求出有多少个不同的长度为 的有趣的数列。
因为最后的答案可能很大,所以只要求输出答案对取模。
注意到,由于所有的奇数项都是递增的,且任意相邻的两项
在数列的前
__EOF__

本文链接:https://www.cnblogs.com/CZ-9/p/16591148.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具