简单格路计数相关

形式#

无限制#

最简单的一种。

  • (0,0) 走到 (n,m),每次只能向上或向右走,一共有 (n+mn) 种方案。

不碰线格路计数问题#

问题:从 (0,0) 走到 (n,m),每次只能向上或向右走,且不能碰到直线 y=x+1,问有多少种方案。

考虑容斥,总方案数为 (n+mn) 种。

考虑第一次碰到直线后,把后面的路径按 y=x+1 对称一下,相当于走到 (n1,m+1)

发现走到 (n1,m+1) 既是充要的,又是必要的,所以碰到直线的方案数就是 (n+mn+1)

双不碰线格路计数问题#

问题:从 (0,0) 走到 (n,n),不能碰到直线 y=x1 和直线 y=x+k(显然两条直线平行),求方案数。

还是容斥,总方案数为 (2nn)

减去分别碰到 y=x1y=x+k 的方案数,但是如果两条都碰呢?

考虑再加上先碰 y=x1 再碰 y=x+k 的,以及先碰 y=x+k 再碰 y=x1 的。

一直这样算下去,直到超出可行范围内。

补充:对于原来的两条直线 y=x+b1, y=x+b2,以及折了若干次的直线 y=x+c1, y=x+c2,新的直线为 y=x+2b1c2, y=x+2b2c1

应用#

Catalan number#

定义卡特兰数 Cn 为从 (0,0) 走到 (n,n) 且不碰到直线 y=x+1 的方案数。

容易算出

Cn=(2nn)(2nn+1)=(2n)!(n!)2(2n)!(n1)!(n+1)!=(2n)!(n!)2(1(n!)2(n1)!(n+1)!)=(2n)!(n!)2(1nn+1)=1n+1(2nn)

运用模型:

  • 长度为 2n 的合法括号序列数。

  • 1,2,...,n 依次入栈,合法出栈序列数。

  • n 个点的无标号有根二叉树数量。

  • n 边凸多边形的三角剖分方案数。

根号分治#

  • 题目:有两个人,从 (0,0) 走到 (n,n),每一步都同时走,全程两人之间的曼哈顿距离不超过 2k,求方案数。

发现同时向上/右走不影响两人之间的距离,考虑枚举异方向走的步数 d

  • 第一个人向上走,第二个人向右走,距离 +2

  • 第一个人向右走,第二个人向上走,距离 2

相当于一个变量,每次 +11,操作 2n 次,最后变为 0,全程都在 [k,k] 内。

放在平面上,从 (0,0) 走到 (n,n),不能碰到 y=xk1y=x+k+1

反射容斥,双不碰线问题,答案为 (2nn)2(2nn(k+1))+2(2nn2(k+1))...

这样算复杂度为 O(n2k)

我们可以 DP,复杂度为 O(nk)

根号分治,O(nn)

LIS 2#

问题:求有多少个排列 p,满足 LIS 2

考虑取反,最长下降子序列长度 2

根据 Dilworth 定理,最大反链等于最小路径覆盖,即排列 p 可以被划分为两个上升子序列。

  • 一个很牛逼的 DP:设 f[i,j] 表示填写了 p1...i,最大值为 j 的合法方案数。

考虑转移到 i+1,下一个填的数可以比 j 大:f[i+1,k]f[i,j](k>j)

否则一定填 <j 的没填的最小数字,如果不填最小,那么之后填这个最小数字会产生一个长度为 3 的下降子序列。

这样转移为 f[i+1,j]f[i,j]

那么 f[i+1,j...n]f[i,j]

考虑转格路计数问题,相当于从 (0,0) 走到 (n,n),不能碰到 y=x1,其实就是 Cn

出处:https://www.cnblogs.com/Sktn0089/p/18173743

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   Lgx_Q  阅读(109)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
more_horiz
keyboard_arrow_up dark_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示