Catalan notes

news/2025/2/25 1:22:38/文章来源:https://www.cnblogs.com/yzxgg/p/18519254

公式

先来看看几个常见公式。

\(H_n=\frac{{\binom{2n}{n}}}{n+1}(n \ge2,n\in \mathbb{N}^*)\)

\(H_n=\frac{H_{n-1}(4n-2)}{n+1}\)

\(H_n=\sum_{i=0}^{n} H_{i}H_{n-i-1}\)

\(H_n=\binom{2n}{n}-\binom{2n}{n-1}\)

不难看出,\(\text{Catalan}\) 数列增长的很快,实际应用中不要忘记开 long long 以及及时取模。

应用

再来列几个典例。

1. 最经典的

感觉这个问题是比较本质的一个卡特兰数问题。

\(n\times n\) 的网格上,从 \((0,0)\) 走到 \((n,n)\),也就是左下角走到右上角,每步可以向上走一格,或者向右走一格,在任意一个时刻,你往右走的次数都不能少于往上走的次数,问你有多少种不同的合法路径。

首先总的路径数可以考虑什么时候向上走,一共有 \(\binom{2n}{n}\) 条,我们可以考虑去找不合法的路径数量。将不合法的路径画出来,不难发现一定会过 \(y=x+1\) 这条直线。我们把第一个交点到 \((n,n)\) 的路径都沿这条直线对称过去,点 \((n,n)\) 就变成了 \((n-1,n+1)\),与第一个交点前面构成了 \((0,0)\)\((n-1,n+1)\) 的一条路径。

因为所有不合法的路径必然都会和 \(y=x+1\) 这条直线产生交点,所以所有的不合法路径都可以通过对称得到一条 \((0,0)\)\((n-1,n+1)\) 的路径。不难发现这个条件是充要的,因为 \((0,0)\)\((n-1,n+1)\) 的路径也会与直线产生交点。所以不合法路径的条数就是到 \((n-1,n+1)\) 的路径条数 \(\binom{2n}{n-1}\)

那么合法的路径总数为 \(\binom{2n}{n}-\binom{2n}{n-1}\),就是第 \(n\) 个卡特兰数。

将这个问题扩展一下,如果网格是 \(n\times m\) 的怎么做。

这个方法的本质是就是找到不合法路径唯一对应的到另一个点的路径,把 \(y=x+1\) 上下移动一下就可以了,只不过和卡特兰数关系就不大了,这个思想好像还挺重要的。

2. 01序列

你现在有 \(n\)\(0\)\(n\)\(1\),问有多少个长度为 \(2n\) 的序列,使得序列的任意一个前缀中 \(1\) 的个数都大于等于 \(0\) 的个数。

可以理解成上个问题的代数版本,可以转化成上一个问题做,也可以用代数方法来做。

首先总方案数一共有 \(\binom{2n}{n}\) 种。

然后对于任意一个不合法的数列,我们一定可以找到一个奇数位 \(2k+1\) 使得 \(1\sim 2k+1\)\(k+1\)\(0\),但只有一个 \(k\) 个 1。此时 \(2k+2\sim 2n\)\(n-k-1\)\(0\)\(n-k\)\(1\)

我们令 \(2k+2\sim 2n\) 的所有 \(0\) 变成 \(1\)\(1\) 变成 \(0\),统计一下 \(1\sim 2n\) 发现一共有 \((k+1)+(n-k)=n+1\)\(0\)\(k+(n-k-1)=n-1\)\(1\)

不难发现,这个东西也是充要的,所以不合法的数列的个数就是有 \(n+1\)\(0\)\(n-1\)\(1\) 的数列个数,也就是 \(\binom{2n}{n-1}\),方案数就是 \(\binom{2n}{n}-\binom{2n}{n-1}\)

答案就是第 \(n\) 个卡特兰数。

\(n\)\(1\)\(m\)\(0\) 的时候呢。同理推一下,答案就是 \(\binom{n+m}{m}-\binom{n+m}{m-1}\).

3. 出栈序列

一个栈的进栈序列为 \(1,2,3,\dots,n\),有多少个不同的出栈序列?

可以转化为上面这个题,但还可以用一种与栈相关的方法来做。

\(f(x)\) 表示 \(1\sim x\) 出栈序列个数。我们考虑当 \(k\) 出栈可以恰好把栈出空时,那么 \(1\sim k-1\)\(k-1\) 个数,那么出栈序列个数就有 \(f(k-1)\) 种;\(k+1\sim n\)\(n-k\) 个数,那么出栈序列个数就有 \(f(n-k)\) 种。对于 \(k\) 来说,两边的方案是独立的,于是根据乘法原理一共有 \(f(k-1)f(n-k)\) 种。

\(1\sim n\) 的每个数都可以将栈出空,所以 \(f(n)=f(0)f(n-1)+f(1)f(n-2)+\dots +f(n-1)f(0)=\sum_{i=0}^{n} f_{i}f_{n-i}\),你会发现这不是我们卡特兰数吗,这样你就得到了卡特兰数的递推公式。

答案就是第 \(n\) 个卡特兰数。

4. 这叫啥啊,买票问题吗

\(2n\) 个人排成一行进入剧场。入场费 \(5\) 元。其中只有 \(n\) 个人有一张 \(5\) 元钞票,另外 \(n\) 人只有 \(10\) 元钞票,剧院无其它钞票,问有多少种方法使得只要有 \(10\) 元的人买票,售票处就有 \(5\) 元的钞票找零?

答案就是第 \(n\) 个卡特兰数。

5. 括号序列

n对括号有多少种匹配方式?

可以理解成栈或者 01 序列,答案就是第 \(n\) 个卡特兰数。

6. 连乘

\(P=a_1×a_2×a_3×\dots×a_n\),依据乘法结合律,不改变其顺序,只用括号表示成对的乘积,试问有几种括号化的方案?

可以理解成括号序列,答案就是第 \(n\) 个卡特兰数。

7. 二叉树计数

\(n\) 个结点可构造多少个不同的二叉树?

不难得到像栈问题那样的递归式,答案就是第 \(n\) 个卡特兰数。

8. 凸多边形划分

对角线不相交的情况下,将一个凸多边形区域分成三角形区域的方法数?

9. 圆上线段

在圆上选择 \(2n\) 个点,将这些点成对连接起来使得所得到的 $n4 条线段不相交的方法数?

例题

1. [SCOI2010] 生成字符串

仿照上面那些题推一下就行了,首先总方案数一共有 \(\binom{2n}{n}\) 种,然后对于任意一个不合法的数列,我们一定可以找到一个奇数位 \(2k+1\) 使得 \(1\sim 2k+1\)\(k+1\)\(0\),但只有一个 \(k\)\(1\)。此时 \(2k+2\sim n+m\)\(m-k-1\)\(0\)\(n-k\)\(1\)。我们令 \(2k+2\sim n+m\) 的所有 \(0\) 变成 \(1\)\(1\) 变成 \(0\),统计一下 \(1\sim n+m\) 发现一共有 \(n+1\)\(0\)\(m-1\)\(1\)。于是答案就是 \(\binom{n+m}{m}-\binom{n+m}{m-1}\).

2. [HNOI2009] 有趣的数列

题意转化一下就是

3.Maximin Game

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/825025.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

R语言安装多个版本和多版本Rstudio管理

如何安装和管理R的多个版本首先如果是需要最新的R版本的话,可以从清华镜像下载(速度也快)https://mirrors.tuna.tsinghua.edu.cn/CRAN/ 若需要旧版本,则可以从这下载https://cran.r-project.org/bin/windows/base/old/那么如何进行管理呢,第一步,点击菜单栏的 tools,然后…

一类特殊的模拟费用流模型

QOJ 7185 题目描述 有 \(n\) 个学生和 \(k\) 门科目,第 \(i\) 个学生选择第 \(k\) 门科目的消耗为 \(a_{i,j}\) 。第 \(i\) 门科目至多被 \(b_i\) 个学生选择。希望求出每一个学生选择恰好一门科目的最小消耗和。 \(n \leq 5\times 10^4 ,k \leq 10\) 。 思路点拨 看到这个题目…

C#/.NET/.NET Core优秀项目和框架2024年10月简报

前言 公众号每月定期推广和分享的C#/.NET/.NET Core优秀项目和框架(每周至少会推荐两个优秀的项目和框架当然节假日除外),公众号推文中有项目和框架的介绍、功能特点、使用方式以及部分功能截图等(打不开或者打开GitHub很慢的同学可以优先查看公众号推文,文末一定会附带项…

低功耗4G模组:MQTT通信功能

​ 今天我们来学习使用合宙Air708E开发板的MQTT通信基本功能。 一、MQTT介绍 MQTT是一种低开销、低带宽占用的即时通讯协议,可以用极少的代码和带宽为远程设备提供实时可靠的消息服务。它适用于硬件性能低下的设备以及网络状况不佳的环境,因此在物联网(IoT)小型设备和移动应…

低功耗4G模组:Air780EP之fskv开发示例

​ 今天我们学习合宙低功耗4G模组Air780EP的fskv开发示例。 一、简介兼容fdb的函数使用fdb的flash空间,启用时也会替代fdb库功能上与EEPROM是类似的fskv与fdb的实现机制导致的差异功能fskvfdbvalue长度4096255key长度6364空间利用率(对比)较低较高读取速度恒定脏数据影响速度,非…

低功耗4G模组HTTP网络协议应用

​ 大家好,今天我们来学习合宙Air780E模组LuatOS开发4G通信中HTTP网络协议的应用,实现模组和服务器之间数据的传输。一、HTTP概述 1.1 简介 HTTP是HyperTextTransferProtocol(超文本传输协议)的缩写。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。…

2024年10月总结及随笔之漏更及失而复得

2024年10月总结及随笔之漏更及失而复得1. 回头看 日更坚持了670天。读《数据湖仓》更新完成 读《数据工程之道:设计和构建健壮的数据系统》开更并持续更新2023年至2024年10月底累计码字1642797字,累计日均码字2451字。 2024年10月码字86801字,同比下降30.77%,环比下降6.65%…

在系统中部署两个版本JDK实现自由切换(windows

前言 ​ 在学习和工作中遇到不同的项目需要使用不同版本的JDK,可以通过以下办法实现jdk版本自由切换。 准备工作: ​ 准备两种不同版本的jdk(我用的是jdk8和jdk11) 链接附上: https://pan.baidu.com/s/1ZGhVYw6YITLUDJFmfLDGqw?pwd=vuz41.在系统变量中新建: 变量名:CLA…

1 The Ecology of Financial Market

阅读 Trades, Quotes and Prices 的第一章。 Originally Posted at: https://clouder0.com/zh-cn/posts/financial-market-ecology/ How Trade Happens Traditional Way 金融市场都有哪些参与者?他们的各自的目的是什么? 任何交易,总是有两个参与方:Buyer & Seller. 买…

《数字经济产业》

今天,我为大家推荐一篇《数字经济产业集群发展 白皮书》报告。 报告 共 71 页。从 “数字经济概念、特征、典型产业集群案例、要素、策略、产业展望” 等六个方面,详细解读了《2023 数字经济产业》。 很重磅。#01#【关键要点】一、数字经济定义据资源作为关键生产要素、以现代…

requests接口响应出现乱码

在项目里使用requests去请求接口出现一串二进制 如:测试时却显示正常,使用的是另一个项目的虚拟环境(python 3.11.5)切换到本项目中,使用本项目虚拟环境仍然乱码(python3.11.5) 在本项目中尝试切换到3.10,创建一个新的虚拟环境,并保留comment.py脚本只需要的包,仍然报…

CUDA 编程学习 (5)——内存访问性能

现代DRAM结构由于核心速度限制,通过burst模式和多Banks结构提高带宽。CUDA中,warp级聚合内存访问减少DRAM请求,提升效率。分块访问模式通过将数据加载到共享内存中,降低全局内存访问频率,进一步优化CUDA内存访问性能。1. DRAM 带宽 1.1 DRAM 核心阵列结构每个 DRAM 核心阵…