[XSY] 计数(DP,NTT,分治)

计数

  • 考虑转化题目,变为网格上有若干个点,要从(0,0)(0,0)(0,0)走到(n,an+1)(n,a_{n+1})(n,an+1) ,每一步只能往右走一步或往上走一步,且若当前在(i,j)(i,j)(i,j) ,必须满足0≤j≤ai+10\leq j\leq a_{i+1}0jai+1,其中an+1=ana_{n+1}=a_nan+1=an 。要对每个kkk求出有多少条恰走过kkk次形如(i,ai+1)→(i+1,ai+1)(i,a_{i+1})\to(i+1,a_{i+1})(i,ai+1)(i+1,ai+1)的步的路径数。
    在这里插入图片描述

上图是n=9的一种情况,题目相当于求在规定只能向右走/向上走的情况下,有多少条从s到t的、不跨越红线(可与红线重叠)的、恰走过kkk次形如(i,ai+1)→(i+1,ai+1)(i,a_{i+1})\to(i+1,a_{i+1})(i,ai+1)(i+1,ai+1)的步的路径。

  • 不考虑最后的那个怪异条件,这就是道小奥题(当时用标数法解决)
  • 考虑转化一下最后的条件:
    引理: 对于其中一个kkk,其答案等价于从(k,1)(k,1)(k,1)走到(n,an)(n,a_n)(n,an)的方案数。
    证明:nnn归纳,在n=1n=1n=1时显然成立。在n>1n>1n>1时考虑初次走到的横坐标为1的点的纵坐标是什么。
    cnt(i,j),kcnt_{(i,j),k}cnt(i,j),k表示从(i,j)(i,j)(i,j)(n,an+1)(n,a_{n+1})(n,an+1)的、恰走过kkk形如(i,ai+1)→(i+1,ai+1)(i,a_{i+1})\to(i+1,a_{i+1})(i,ai+1)(i+1,ai+1)的步的符合条件的路径数,
    ans(i,j)ans_{(i,j)}ans(i,j)表示从(i,j)(i,j)(i,j)(n,an+1)(n,a_{n+1})(n,an+1)的,不考虑走了几次形如(i,ai+1)→(i+1,ai+1)(i,a_{i+1})\to(i+1,a_{i+1})(i,ai+1)(i+1,ai+1)的步的符合条件的路径数。
    k=0,k=0,k=0,
    cnt(0,0),k=∑y=0a1−1cnt(1,y),kcnt_{(0,0),k}=\sum_{y=0}^{a_1-1}cnt_{(1,y),k}cnt(0,0),k=y=0a11cnt(1,y),k(y:初次走到的横坐标为1的点的纵坐标)
    =∑y=0a1−1ans(1,y+1)=\sum_{y=0}^{a_1-1}ans_{(1,y+1)}=y=0a11ans(1,y+1)(由归纳假设得出)
    =∑y′=1a1ans(1,y′)=ans(0,1)=\sum_{y'=1}^{a_1}ans_{(1,y')}=ans_{(0,1)}=y=1a1ans(1,y)=ans(0,1)
    k>0,k>0,k>0,
    cnt(0,0),k=∑y=0a1−1cnt(1,y),k+cnt(1,a1),k−1cnt_{(0,0),k}=\sum_{y=0}^{a_1-1}cnt_{(1,y),k}+cnt_{(1,a_1),k-1}cnt(0,0),k=y=0a11cnt(1,y),k+cnt(1,a1),k1
    =∑y=0a1−1ans(k+1,y+1)+ans(k,a1+1)=\sum_{y=0}^{a_1-1}ans_{(k+1,y+1)}+ans_{(k,a_1+1)}=y=0a11ans(k+1,y+1)+ans(k,a1+1)
    =∑y′=1a1ans(k+1,y′)+ans(k,a1+1)=ans(k,1)=\sum_{y'=1}^{a_1}ans_{(k+1,y')}+ans_{(k,a_1+1)}=ans_{(k,1)}=y=1a1ans(k+1,y)+ans(k,a1+1)=ans(k,1)
  • 考虑如何求ans(k,1)ans_{(k,1)}ans(k,1)
    像我前面说的,小奥标数法肯定正确,但复杂度太低了,我们必须另辟蹊径。ans(k,1)ans_{(k,1)}ans(k,1)难求是因为红线的限制,否则在一个普通的矩形网格内从(i,j)(i,j)(i,j)(i+a,j+b)(i+a,j+b)(i+a,j+b)(a≥0,b≥0)(a\geq0,b\geq0)(a0,b0)的合法路径数可用Ca+baC_{a+b}^{a}Ca+ba算出
    在这里插入图片描述
  • 因此我们考虑将题目不规则的网格活动区间划分成数个矩形,分治求解。
  • 最自然的想法是每一刀都竖着切,直接划分为若干个竖直的矩形:
    在这里插入图片描述

但这样太慢了,肯定会T

  • 考虑竖切、横切交替进行,把原区间大概划分成这样:
    在这里插入图片描述

可以证明复杂度是正确的

  • 考虑具体如何分治:
    假设我们切完后把原区间分为了右上、右下矩形、左下三个部分。
    题目所求为浅紫线上的点到(n,an+1)(n,a_{n+1})(n,an+1),只向上/向右走、不跨越红线的路径数。
    在这里插入图片描述
    在这里插入图片描述
  • 右下矩形部分粉紫线上的点到(n,an+1)(n,a_{n+1})(n,an+1),要么经右下矩形部分的橙线上的点,要么经深紫线上的点,所以
    该段粉紫线上某点到(n,an+1)的路径数=∑粉紫线上该点到右下矩形部分的橙线上某点的路径数×右下矩形部分的橙线上该点到(n,an+1)的路径数+∑粉紫线上该点到深紫线上某点的路径数×深紫线上该点到(n,an+1)的路径数该段粉紫线上某点到(n,a_{n+1})的路径数=\sum粉紫线上该点到右下矩形部分的橙线上某点的路径数\times 右下矩形部分的橙线上该点到(n,a_{n+1})的路径数+\sum粉紫线上该点到深紫线上某点的路径数\times 深紫线上该点到(n,a_{n+1})的路径数线(n,an+1)=线线×线(n,an+1)+线线×线(n,an+1)
  • 又因为右下部分为矩形,所以粉紫线上某点到右下矩形部分的橙线上某点的路径数、粉紫线上某点到深紫线上某点的路径数均可用组合数O(1)O(1)O(1)求出。
  • 在分治的第一层,橙线上的点到(n,an+1)(n,a_{n+1})(n,an+1)的路径数是已知的(均为1),但深紫线上的点到(n,an+1)(n,a_{n+1})(n,an+1)的路径数未知。所以我们先递归右上部分,求出深紫线上的点到(n,an+1)(n,a_{n+1})(n,an+1)的路径数。
  • 如此,我们便可以更新粉紫线上的点到(n,an+1)(n,a_{n+1})(n,an+1)的路径数
  • 左下部分浅紫线上的点到(n,an+1)(n,a_{n+1})(n,an+1)的路径数可以通过递归左下部分求出,但为此我们必须先求出黄线上的点到(n,an+1)(n,a_{n+1})(n,an+1)的路径数:
    黄线上的点到(n,an+1)(n,a_{n+1})(n,an+1),要么经右下矩形部分的橙线上的点,要么经深紫线上的点,所以
    黄线上某点到(n,an+1)的路径数=∑黄线上该点到右下矩形部分的橙线上某点的路径数×右下矩形部分的橙线上该点到(n,an+1)的路径数+∑黄线上该点到深紫线上某点的路径数×深紫线上该点到(n,an+1)的路径数黄线上某点到(n,a_{n+1})的路径数=\sum黄线上该点到右下矩形部分的橙线上某点的路径数\times 右下矩形部分的橙线上该点到(n,a_{n+1})的路径数+\sum黄线上该点到深紫线上某点的路径数\times 深紫线上该点到(n,a_{n+1})的路径数线(n,an+1)=线线×线(n,an+1)+线线×线(n,an+1)
  • 黄线和粉紫线的更新都可以用NTT搞出来。总时间复杂度O(nlog2n)O(nlog^2n)O(nlog2n)

ps:为了保证不重不漏,当我说"某点到××\times\times××线上某点的路径数"时,那么所到达的该线上的点是所有该线上的点中最先被到达的。
以下图为例,某点到橙线上的(x,y)(x,y)(x,y)的路径数,统计的路径的最后一步必为(x−1,y)→(x,y)(x-1,y)\to(x,y)(x1,y)(x,y)
在这里插入图片描述

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

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

相关文章

P3700-[CQOI2017]小Q的表格【分块,欧拉函数】

正题 题目链接:https://www.luogu.com.cn/problem/P3700 题目大意 一个n∗nn*nn∗n个数的数字表格,开始位置(a,b)(a,b)(a,b)上的是a∗ba*ba∗b。数字表格需满足以下条件 对于任意(a,b)(a,b)(a,b)有f(a,b)f(b,a)f(a,b)f(b,a)f(a,b)f(b,a)对于任意(a,b)(a,b)(a,b)有…

.Net Core应用框架Util介绍(一)

距离上次发文,已经过去了三年半,这几年技术更新节奏异常迅猛,.Net进入了跨平台时代,前端也被革命性的颠覆。回顾2015年,正当我还沉迷于JQuery EasyUi的封装时,突然意识到技术已经过时。JQuery在面对更加复…

牛客网 【每日一题】5月26日题目精讲 [JSOI2007]建筑抢修

链接: 文章目录题目描述题意:题解:题目描述 小刚在玩JSOI提供的一个称之为“建筑抢修”的电脑游戏:经过了一场激烈的战斗,T部落消灭了所有z部落的入侵者。但是T部落的基地里已经有N个建筑设施受到了严重的损伤&#xf…

【二分】数列分段(ybtoj 二分-1-1)

数列分段 ybtoj 二分-1-1 题目大意 给出一个序列A,让你把它分成m段,使每段和最大值最小 输入样例 5 3 4 2 4 5 1输出样例 6数据范围 1⩽M⩽N⩽1051\leqslant M\leqslant N\leqslant 10^51⩽M⩽N⩽105 sum{Ai}⩽109sum\begin{Bmatrix}A_i\end{Bmatr…

CF878E-Numbers on the blackboard【并查集,贪心】

正题 题目链接:https://www.luogu.com.cn/problem/CF878E 题目大意 nnn个数字,每次可以把两个相邻的数字x,yx,yx,y变为x2yx2yx2y。 mmm次询问一个区间合成一个数字后最大是多少。 解题思路 答案可以把每个数字变成xicix_i^{c_i}xici​​,其中ci≤ci−1…

2021-03-24

非空G个数G的大小n的奇偶性答案>4\\D3\奇数D3至少一个大小>2\D3均为1偶数D-12大小均>2\D2至少一个大小>2奇数D2一个大小1,一个大小>1偶数D-12均为1奇数D-12均为1偶数

牛客网【每日一题】5月27日题目精讲 货币系统

链接: 文章目录题目描述题解:代码:题目描述 在网友的国度中共有n种不同面额的货币,第i种货币的面额为a[i],你可以假设每一种货币都有无穷多张。为了方便,我们把货币种数为n、面额数组为a[1…n]的货币系统记…

使用.NET Core+Docker 开发微服务

.NET Core发布很久了,因为近几年主要使用java,所以还没使用过.NET Core,今天正好有一个c#写的demo,需要做成服务,不想再转成java来实现,考虑使用.NET CORE来尝下鲜,目标是开发一个微服务,然后部…

【二分】防具布置/秦腾与教学评估(ybtoj 二分-1-2/jzoj 1253/luogu 4403)

正题 ybtoj 二分-1-2 jzoj 1253 luogu 4403 题目大意 给出n组数:si,ei,dis_i,e_i,d_isi​,ei​,di​ 对于每组数据,表示在sis_isi​加1,然后每隔did_idi​就加1,当位置大于eie_iei​时结束 题目保证数字是奇数的位置最多只有1个…

[XSY] 智慧树(线性同余方程组,线段树/树状数组)

智慧树 解决此题有两个要点: 如何判断一个线性同余方程组有没有解如何统计合法子序列数目 先看第2点: 若一个序列是合法的,则这个序列的所有子序列都是合法的 考虑对∀1≤i≤n\forall 1\leq i\leq n∀1≤i≤n,求出以iii为左端点…

P2272-[ZJOI2007]最大半连通子图【tarjan,缩点】

正题 题目链接:https://www.luogu.com.cn/problem/P2272 题目大意 半连通图定义为任意两个点(u,v)(u,v)(u,v)满足uuu可以到vvv或vvv可以到uuu的有向图。 现在给出一张图,求最大半连通子图与其数量。 解题思路 显然一个强连通一定是一个半连通,所以我…

牛客网 【每日一题】5月28日题目精讲 Protecting the Flowers

链接: 文章目录题目描述题意:题解:代码:时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 32768K,其他语言65536K 64bit IO Format: %lld题目描述 Farmer John went to cut some wood and…

【二分】最大均值(ybtoj 二分-1-3)

最大均值 ybtoj 二分-1-3 题目大意 给出一个序列,让你求一个长度不小于m的子序列,使其平均值最大 输入样例 10 6 6 4 2 10 3 8 5 9 4 1输出样例 6500数据范围 1⩽L⩽N⩽1051\leqslant L \leqslant N \leqslant 10^51⩽L⩽N⩽105 Ai⩽2000A_i\leqs…

Steeltoe之Config客户端篇

Steeltoe是一款开源项目,其目标是选取源自Netflix及其它公司的工具,使它们能够运用于.NET社区。它不仅可以在.NET Core上,也可以在.NET Framework 4.X以上使用。此外,大多数的组件能够同时运行在本地机器及Cloud Foundry(一个领先…

[XSY] 绿色(圆方树、树形DP、树上差分)

绿色 题意简述 题解 首先,每次修改完点权后,重新考虑一遍所有路径显然是不现实的,所以我们考虑求出经过每个点的两端同色的简单路径数,这样权值和容易统计和修改。 接下来分析仙人掌上的简单路径性质。一条简单路径上的边&…

P4309-[TJOI2013]最长上升子序列【Splay】

正题 题目链接:https://www.luogu.com.cn/problem/P4309 题目大意 nnn次,第iii次在第xix_ixi​个数字后面插入iii然后询问最长上升子序列长度。 解题思路 因为是插入所以考虑用SplaySplaySplay维护,因为从小到大插入,其实每次就是找一个在x…

牛客网 【每日一题】5月29日 管道取珠

链接: 文章目录题目描述题意:题解:代码:时间限制:C/C 2秒,其他语言4秒 空间限制:C/C 524288K,其他语言1048576K 64bit IO Format: %lld题目描述 管道取珠是小X很喜欢的一款游戏。在本…

【dfs】拔河比赛(ybtoj dfs-1-1)

拔河比赛 ybtoj dfs-1-1 题目大意 给你n个数,让你分成两堆,使其数量相差不大于1,问数值相差最小是多少 输入样例 1 3 55 50 100输出样例 5数据范围 1⩽T⩽501\leqslant T \leqslant 501⩽T⩽50 2⩽N⩽202\leqslant N\leqslant 202⩽N⩽…

半天搭建你的Jenkins持续集成与自动化部署系统

前言相信每一位程序员都经历过深夜加班上线的痛苦!而作为一个加班上线如家常便饭的码农,更是深感其痛。由于我们所做的系统业务复杂,系统庞大,设计到多个系统之间的合作,而核心系统更是采用分布式系统架构,…

牛客网 【每日一题】6月10日 失衡天平

链接: 文章目录题目描述题解:代码:时间限制:C/C 1秒,其他语言2秒 空间限制:C/C 262144K,其他语言524288K 64bit IO Format: %lld题目描述 终于Alice走出了大魔王的陷阱,可是现在傻傻…