格路计数

news/2024/12/21 20:07:10/文章来源: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 还是时常在简单的东西上失败,但是…

第一章预习作业

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

9月第一周漏洞学习

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

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分钟: 短线看能否走出下跌五浪吧:观望

AtCoder Beginner Contest 205 A~E 题解

A - kcal 题目大意 我们有一种每\(100\)毫升含有\(A\)千卡热量的饮料。\(B\)毫升的这种饮料含有多少千卡热量? \(0\le A, B\le 1000\) 输入格式 \(A~B\) 输出格式 输出\(B\)毫升这种饮料包含的的千卡数。最大允许浮点数精度误差\(10^{-6}\)。 样例\(A\) \(B\) 输出\(45\) \(20…

AtCoder Beginner Contest 196 A~E 题解

A - Difference Max 题目大意 给定四个整数\(a,b,c\)和\(d\)。 我们要选择两个整数\(x\)和\(y\)(\(a\le x\le b\);\(c\le y\le d\))。输出最大的\(x-y\)。 \(-100\le a\le b\le 100\) \(-100\le c\le d\le 100\) 输入格式 \(a~~b\) \(c~~d\) 输出格式 输出最大的\(x-y\)。 样…

AtCoder Beginner Contest 173 A~D 题解

A - Payment 题目大意 如果使用价值\(1000\)元的纸币(假设有)支付\(N\)元,服务员会找多少钱? \(1\le N\le 10000\) 输入格式 \(N\) 输出格式 一行,即服务员找的钱数。 样例输入 输出1900 1003000 0分析 特判: 如果\(N\)除以\(1000\)能整除,那么不需要找钱,输出\(0\); …

AtCoder Beginner Contest 188 A~D 题解

A - Three-Point Shot 题目大意 有两个球队,分别得到\(X\)分和\(Y\)分,问得分较少的球队能否在获得三分后超越对方。 \(0\le X,Y\le 100\) \(X \ne Y\) \(X\)和\(Y\)都是整数。 输入格式 \(X~Y\) 输出格式 如果能,输出Yes;否则,输出No。 样例X Y 输出3 5 Yes分析 这个不用…

Eclipse安装包下载慢解决方法

最近开始学习Java,使用经典的Eclipse IDE,结果发现下载太慢……问题分析Eclipse的下载依赖于其他镜像,(在我这里)默认为朝鲜的镜像(可能在不同电脑中默认不同):点击Select Another Mirror:选择中国的镜像:

程序无法启动,因为您的计算机缺少msvcr71.dll。

背景 打开CrystalTile2这个软件出现此提示。 解决 有很多解决办法,最简单粗暴也是见效最快的就是直接从网上下载dll文件放到对应位置。 下载 https://msvcr71.dll-box.com/zh/自己存了一份,以免网址失效(虽然按道理来说一般不会失效)。 https://www.123pan.com/s/EhW3jv-IW…

Panasonic Programming Contest 2020 C (Sqrt Inequality) 题解

题目大意 输入三个整数\(a\),\(b\),\(c\),如果 \(\sqrt a + \sqrt b < \sqrt c\) 成立,输出Yes,否则输出No。 样例 输入 #1 2 3 9输出 #1 No\(\sqrt 2 + \sqrt 3 < \sqrt 9\) 不成立。 输入 #2 2 3 10输出 #2 Yes\(\sqrt 2 + \sqrt 3 < \sqrt 10\) 成立。 分析 错…