卡特兰数与翻折法
膜拜 dy 老师,更建议去看 dy 老师 的!
(有不少图是盗的,大部分内容是抄的。)
考虑一个网格行走的问题,在一个平面直角坐标系中,要从 走到 ( ),每次只能向右或向上走一单位长度,并且要求在任意时刻,你所在的坐标 满足 ,也就是不能越过第一象限的角平分线。
part1
我们设 表示卡特兰数第 项,也就是从 走到 的方案数。
一个思路是缩小问题规模,转化为子问题,我们考虑枚举一下路径最后一个在 上的点 。
那么不难发现接下来 只能往 走,而最后一步只能是从 走到 。
现在的问题等价于找 到 的方案数,满足路径中的点任意时刻不会超过 与 之间的那条连线。
你发现这定义其实就是题目要求,将其平移到起点位置,发现是求 到 的合法路径条数。
然后变成了一个子问题!
于是 。
求解复杂度 。
part2
假如没有这个限制,那么等价于在 步中, 步向右, 步向上的不同方案数,答案就为 。
然后考虑容斥减去不合法的方案数也能得到最终的答案。
如果一种路径方案不合法,那么这条路径上至少有一个点碰到了 。
假设第一次碰到 的点为 ,将 之后到 的路径关于直线 对称。
下图中绿线为 ,红线为源路径越过第一象限角平分后的部分,蓝线为关于 对称后的结果。
所以任意不合法路径对称后都能唯一对应一条从 到达 的路径,并且任何一条从 到 的路径也能唯一对应一条不合法的原路径,二者构成双射,那么不合法路径的数目就为 。
所以答案为 。
这种思想就是翻折法,对于不合法的进行单独的考虑,然后通过类似翻折的技巧对应到另一种双射的情况,然后进行另外的求解,之后容斥计算。
有点事情,等没事的时候再回来更新,但是先发出来了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App