[组合计数] 卡特兰数题目讲解
上承:卡特兰数知识讲解
在学完了卡特兰数的知识之后,我们来看几道例题,研究一下卡特兰数的运用。
题意:用 n 个 1 和 m 个 0 拼成的任意前缀都满足 1 的个数不小于 0 的个数的字符串的个数对质数 20100403 取模的结果。 (1≤m≤n≤106)
题解:我们发现前缀限制与卡特兰数的 y=x 限制很像,于是就考虑将字符串转换为二维平面上的路径,让 1 表示向右走一步, 0 表示向上走一步,则前缀个数限制变为不穿过 y=x 这一直线。现在我们要求从 (0,0) 到 (n,m) 的路径条数。我们继续沿用卡特兰的翻转思想,求总路径数-穿过 y=x 的路径数,将穿过直线的路径从其第一个穿过的位置开始翻转,于是终点变为 (m−1,n+1) ,并且穿过直线的路径与翻转后从 (0,0) 到终点的路径一一对应,于是答案就是 \tbinom{n+m}{n}-\tbinom{n+m}{m-1} ,预处理阶乘与其逆元快速计算即可。
启发:该题的模型转换与计数时的思想类比还是很巧妙的,值得学习。
题意:求用 n 个任意大小的矩形拼成一个高度为 n 的阶梯的方案数。(下图为 n=3 的情况)。(不取模, 1\le n\le 500 )
我们考虑以包含左下角的矩形为切入点,它一定会顶到阶梯的右上角(否则覆盖每个右上角的点都需要一个矩形,总个数大于 n ),因此它将阶梯分为两个小阶梯,于是我们在意料之中惊奇地发现它是个卡特兰数并解决了这道题。
启发:选好切入点,将原问题分为两半,这一卡特兰数的思想对我们大有帮助。
好了,你已经掌握了卡特兰数的基本内容,来做一下这道习题吧!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理