卡特兰数与翻折法

膜拜 dy 老师,更建议去看 dy 老师 的!

(有不少图是盗的,大部分内容是抄的qq_emoji: ruo。)

考虑一个网格行走的问题,在一个平面直角坐标系中,要从 (0,0) 走到 (n,n)n1 ),每次只能向右或向上走一单位长度,并且要求在任意时刻,你所在的坐标 (x,y) 满足 xy,也就是不能越过第一象限的角平分线。

part1

我们设 catn 表示卡特兰数第 n 项,也就是从 (0,0) 走到 (n,n) 的方案数。

一个思路是缩小问题规模,转化为子问题,我们考虑枚举一下路径最后一个在 x=y 上的点 i

image

那么不难发现接下来 (i,i) 只能往 (i+1,i) 走,而最后一步只能是从 (n,n1) 走到 (n,n)

现在的问题等价于找 (i+1,i)(n,n1) 的方案数,满足路径中的点任意时刻不会超过 (i+1,i)(n,n1) 之间的那条连线。

你发现这定义其实就是题目要求,将其平移到起点位置,发现是求 (0,0)(ni1,ni1) 的合法路径条数。

然后变成了一个子问题!

于是 catn=i=0n1cati×catni1

求解复杂度 O(n2)

part2

假如没有这个限制,那么等价于在 2n 步中,n 步向右,n 步向上的不同方案数,答案就为 (2nn)

然后考虑容斥减去不合法的方案数也能得到最终的答案。

如果一种路径方案不合法,那么这条路径上至少有一个点碰到了 y=x+1

假设第一次碰到 y=x+1 的点为 p,将 p 之后到 (n,m) 的路径关于直线 y=x+1 对称。

下图中绿线为 y=x+1,红线为源路径越过第一象限角平分后的部分,蓝线为关于 y=x+1 对称后的结果。

所以任意不合法路径对称后都能唯一对应一条从 (0,0) 到达 (n1,n+1) 的路径,并且任何一条从 (0,0)(n1,n+1) 的路径也能唯一对应一条不合法的原路径,二者构成双射,那么不合法路径的数目就为 (2nn+1)

所以答案为 (2nn)(2nn+1)

这种思想就是翻折法,对于不合法的进行单独的考虑,然后通过类似翻折的技巧对应到另一种双射的情况,然后进行另外的求解,之后容斥计算。

有点事情,等没事的时候再回来更新,但是先发出来了。

posted @   Pitiless0514  阅读(172)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示