格路计数

news/2025/4/19 3:59:48/文章来源:https://www.cnblogs.com/aqz180321/p/18402195

前言

完全借鉴于 洛谷日报

前提条件

在一个网格图上, 每一次可以从 \((x,y)\) 走到 \((x+1,y-1)\) 或者 \((x+1,y-1)\) 限制是一条直线 \(y=k\)

题外话

我们其实可以发现这和每一次可以从 \((x,y)\) 走到 \((x+1,y)\) 或者 \((x, y+1)\) 限制是一条 \(45°\)的斜线 \(y=x+k\) 是等价的

我们发现我们要从原点走到红点,我们可以走的(其它路径走到后就肯定不会产生贡献)路径构成了一个斜着的矩形,这和另一种格路计数是等价的

总路径数

我们设 \(<a,b,c,d>\)表示从 \((a,b)\) 走到 \((c,d)\)的路径数

首先需要满足 \(a \le c\)

然后考虑我们走的步数是 \(c-a\) 步, 考虑设向上走的步数是 \(x\) 步, 则有 \(x - (c - a - x) = d - b\) , 解得 \(x = \frac{d-b+c-a}{2}\)

所以总方案数 \(<a,b,c,d> = {c-a\choose \frac{d-b+c-a}{2}}\)

特殊的当 \(d-b+c-a\) 为奇数的时候这个值为 \(0\)

与一条直线相交与不相交

我们用 \([a,b,c,d,k]\) 表示 从 \((a,b)\)走到 \((c,d)\) 与直线 \(y=k\)相交的方案数

\(\{a,b,c,d,k\}\) 与上述定义相反 为相交

我们需要分类讨论

  • \(a \le k \le c\)

这个比较显然 \([a,b,c,d,k] = <a,b,c,d>\)

\(\{a,b,c,d,k\} = 0\)

  • \(k < a\) 或者 \(c < k\)

然后就是反射容斥有 \([a,b,c,d,k] = <a,b,c, 2k - d>\) 或者我们也可以把 \((a,b)\) 对称过去, 有 \([a,b,c,d,k]=<a,2k-b,c,d>\)

\(\{a,b,c,d,k\} = <a,b,c,d> - [a,b,c,d,k]\)

与一条直线相交次数之和

我们只讨论从 \((0,0)\) 出发的情况

\([a,b,k]\) 表示从 \((0,0)\) 走到 \((a,b)\) 的所有路径与直线 \(y = k\) 相交的次数之和

首先分类讨论

  • \(0 \le k \le a\)

然后我们考虑两种计算方法

\[[a,b,k] = \sum_{i=0}^{a} <0,0,i,k> \times <i,k,a,b> \]

另一种 我们设 \(res1\) 表示最后一个交点的贡献, \(res2\) 表示 剩下的交点个数的贡献

\(res1 = <0,0,a,b>\)

\(res2 = \sum_{i=0}^{a} <0,0,i,k> \times ([i+1, k-1, a, b,k] + [i+1, k+1, a, b, k])\)

后边的分讨是为了消除 \((i,k)\) 对于交点的影响, 根据上文有

\([i+1,k-1,a,b,k]=<i+1,k-1,a,b>\)

\([i+1,k+1,a,b,k] = <i+1, 2k- (k+1),a,b>=<i+1, k-1,a,b>\)

我们发现这是相等的

于是

\(res2 = \sum_{i=0}^{a} <0,0,i,k> \times 2 <i+1,k-1,a,b> = 2 \sum_{i=0}^{a}<0,0,i,k> \times < i,k,a-1,b+1>\)

那么第二种计算方法就是

\[[a,b,k]=<0,0,a,b> + 2\sum_{i=0}^a <0,0,i,k> \times <i,k,a-1,b+1> \]

我们发现这两种挺像的, 于是考虑一下递推, 设 \(F(a,b,k)=\sum_{i=0}^a <0, 0, i, k> \times <i,k,a,b>\)

那么就有 \(F(a,b,k)=<0,0,a,b>+ 2F(a-1,b+1,k)\)

边界就是 \(a-1 < 0\) 值为 \(0\)

那么我们把这个展开就是

\[[a,b,k]=\sum_{i=0}^a <0,0,a-i,b+i> 2^i = \sum_{i=0}^a 2^{a-i}{i\choose \frac{a+b}{2}} \]

相当于我们要求形如 \(\sum_{i=m}^n2^{n-i}{i\choose m}\) 的式子

实际上就是 \(\sum_{i=m+1}^{n+1} {n+1\choose i}\)

  • \(k > a\) 或者 \(k < 0\)

反射容斥即可, 因为反射之后该交还是交, 不交还是不交

\([a,b,k] = [a,2k-b,k]\)

其实还有 留给以后的自己 咕咕咕

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/794199.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

9.2-9.8 总结

zhicheng123456做题 因为联考众多,所以说只有不多的做题。主要得知了两个结论:找树剖到根的轻链(动态)的方法和把线段(均匀随机分界点)分为 \(n\) 段的 \(k\) 短值的计算。 联考:https://www.cnblogs.com/british-union/p/liankao.html 还是时常在简单的东西上失败,但是…

MemoryT 和 SpanT

Memory 和 Span 是 C# 中的高效内存管理工具,特别适用于处理大数据集或需要避免不必要的内存分配的场景。它们提供了高性能、低分配的方式来操作内存。相比传统的数组和集合,它们有以下几个关键好处: 零拷贝:Span 和 Memory 允许对现有内存块进行切片操作,而不会产生新的数…

GYM 105264 C

题目描述 给定一个长度为 \(N\) 的数组 \(A\),每次你可以令 \(A_i \leftarrow A_i+1\) 或 \(A_i-1\)。求进行至多 \(k\) 次操作后 \(A\) 中最少不同元素数量。 思路 首先对 \(A\) 进行排序。 令 \(dp_{i,j}\) 表示考虑前 \(i\) 个数,有 \(j\) 个不同的值时最多还能剩余几次操…

第一章预习作业

第一周预习报告 学习内容《WindowsC/C++加密解密实战》第1,2章 第一章概念复习 第二章主要在Linux(Ubuntu,openEuler)上把软件更新到最新版(3.0版本以上),如果默认不是,参考下面脚本。 AI对学习内容的总结 要求 让AI(kimi,元宝等)阅读学习内容并进行总结,教材内容可使…

9月第一周漏洞学习

蜂信物联(FastBee)物联网平台download存在任意文件下载漏洞 漏洞描述 FastBee是一款开源物联网平台,致力于为全球开发者提供稳定、搞笑的物联网解决方案。FastBee在download接口中存在任意文件下载漏洞,可能导致敏感信息泄露、数据盗窃及其他安全风险,从而对系统和用户造成…

UNIQUE VISION Programming Contest 2022(AtCoder Beginner Contest 248)C~D 题解

C - Dice Sum 题目大意 有多少个整数序列\(A=(A_1,\dots,A_N)\)符合如下条件:\(1\le A_i\le M\) \(\sum\limits_{i=1}^NA_i\le K\)输出答案,对\(998244353\)取模。 \(1\le N,M\le 50\) \(N\le K\le NM\) 输入格式 \(N~M~K\) 输出格式 输出答案,对\(998244353\)取模。 分析 艹…

AtCoder Beginner Contest 252 A~G 题解

前言这是我第一次写7题(A~G)的ABC题解,若有写得不好或者不到位的地方请多多指教,我将万分感激,感谢大家的支持!A - ASCII code 题目大意 给定正整数\(N\),输出ASCII码是\(N\)的字母。 \(97\le N\le 122\) 输入格式 \(N\) 输出格式 输出ASCII码是\(N\)的字母。 分析 注意…

苯乙烯

周线 日线: 60分钟: 短线看能否走出下跌五浪吧:观望