Loading [MathJax]/extensions/TeX/mathchoice.js

[组合计数] 卡特兰数题目讲解

上承:卡特兰数知识讲解

在学完了卡特兰数的知识之后,我们来看几道例题,研究一下卡特兰数的运用。

例1:luoguP1641[SCOI2010]生成字符串

题意:用 n1m0 拼成的任意前缀都满足 1 的个数不小于 0 的个数的字符串的个数对质数 20100403 取模的结果。 (1mn106)

题解:我们发现前缀限制与卡特兰数的 y=x 限制很像,于是就考虑将字符串转换为二维平面上的路径,让 1 表示向右走一步, 0 表示向上走一步,则前缀个数限制变为不穿过 y=x 这一直线。现在我们要求从 (0,0)(n,m) 的路径条数。我们继续沿用卡特兰的翻转思想,求总路径数-穿过 y=x 的路径数,将穿过直线的路径从其第一个穿过的位置开始翻转,于是终点变为 (m1,n+1) ,并且穿过直线的路径与翻转后从 (0,0) 到终点的路径一一对应,于是答案就是 \tbinom{n+m}{n}-\tbinom{n+m}{m-1} ,预处理阶乘与其逆元快速计算即可。

启发:该题的模型转换与计数时的思想类比还是很巧妙的,值得学习。

例2:luoguP2532[AHOI2012]树屋阶梯

题意:求用 n 个任意大小的矩形拼成一个高度为 n 的阶梯的方案数。(下图为 n=3 的情况)。(不取模, 1\le n\le 500

我们考虑以包含左下角的矩形为切入点,它一定会顶到阶梯的右上角(否则覆盖每个右上角的点都需要一个矩形,总个数大于 n ),因此它将阶梯分为两个小阶梯,于是我们在意料之中惊奇地发现它是个卡特兰数并解决了这道题。

启发:选好切入点,将原问题分为两半,这一卡特兰数的思想对我们大有帮助。

好了,你已经掌握了卡特兰数的基本内容,来做一下这道习题吧!

luoguP4769[NOI2018]冒泡排序

posted @   林政宇  阅读(532)  评论(0编辑  收藏  举报
编辑推荐:
· 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编程运行原理
点击右上角即可分享
微信分享提示