格路径计数
格路径计数
基础格路径计数
问题:格路径上从
显然一共走
有限制格路径计数
下面说的限制都是不接触到某条线的限制,若题目要求不超过,可以依次
单条直线限制
还是从

这是卡特兰数经典问题,考虑把最后一次进入直线之后的路径后半部分翻折一下,最终终点也会翻折变成
两条直线限制
还是从
有人说直接对两条直线分别做然后减去就行了。
但遇到一个路径同时经过两条直线的情况就会算重复。

我们设两条直线分别为 A,B,我们定义一个 AB 字符串例如 BABA 表示依次进入直线 BABA ,若多次进入 A 或 B,只考虑第一次,也就是 ABBBAAAABBB = ABAB。
我们设
对于一个路径序列代表的字符串 ABABA,我们把字符串每一个本质不同的子段在最后一次出现的位置倒着依次翻折,这样和
例如 ABABA 的子段 ABA,我们在最后一次进入 A 时翻折一下,最后一次进入 B 时翻折一下,倒数第二次进入 A 时再翻折一下。(如下图,三种颜色代表三次不同翻折)

我们发现序列
贡献都是 1 是因为我们只翻折最后一次出现的位置,大家可以手模一下发现若翻折前面出现的位置得出的路径和原来的不一样。
于是不合法的方案数就变成了:
会发现这样每条直线只会被计算一次。
总方案
多条直线限制
可以找出限制最紧的两条变成两条直线限制。
k-Dyck路(k阶卡特兰数)
问题:还是格路径,但是现在只能向上走
这是

我们我们转化为一个新问题:
只能向上走
向上走的数量为
我们将新问题中的接触到
首先找出在直线
将最高点后边的路径平移到
可以证明,转变之后的新路径满足一下几个性质:
-
一定不会接触到
。- 这里很显然。
-
最开始一定有两次向右操作。
-
当找出的最高点不在
上,设向右和向上分别为 ,若这个点之后的操作为 或者 ,那么在操作后的点一定距离 更远,最高点会选择他。 -
当最高点在
上时,他只有两种可能:-
第一种和上面那种一样。
-
第二种是下一步只需要一次
就可以到终点,若是这种情况,那么旧路径的第一次操作一定是 ,否则就会出现一个点在 上方,最高点不会选到它。
-
-
我们删去新路径的第一次
新问题的新路径和旧问题路径一一对应,但新问题的旧路径和新问题的新路径并不是一一对应的。
我们发现在新路径中将任意一断点截断,交换两个部分(上述转变的逆过程),本身的终点会在操作后变成最高点,且均在
这样每一种旧路径对应一个新路径,每一个新路径对应
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App