1 条题解
-
0
自动搬运
来自洛谷,原作者为

NaCly_Fish
北海虽赊,扶摇可接。搬运于
2025-08-24 23:15:57,当前版本为作者最后更新于2025-05-15 10:20:56,作者可能在搬运后再次修改,您可在原文处查看最新版自动搬运只会搬运当前题目点赞数最高的题解,您可前往洛谷题解查看更多
以下是正文
来一个和官方题解不一样的做法,代码暂时没写,但经过暴力做法验证。
一:去除 的限制
如果没有「每 天必须清空锅」的限制,那么原问题就是比较经典的限制范围的格路计数问题。所以来考虑怎么把问题化简一下。
利用符号化计数的思想,考虑所有「没有清空锅的极长连续段」,那么所有 天的情况就是由若干连续段拼接成的。
具体来说,设 为 时原问题的答案, 为「长度为 的极长连续段」的答案,则有:
其中 和 分别为 和 的生成函数。
我们知道,在 的时候,原问题的答案等同于「不必须清空锅」情况的答案,并设其为 ,所以我们有
这样就能直接求出 :
由于 本身就是个 次多项式,对 取模并不影响计算的结果。
这样在求出 后,就只需要用两次多项式求逆即可得到答案。
二:朴素地算
因为算出 的后续工作都很简单,下文中 及 的定义将与上文不同。
从 出发,每一步有 的概率坐标变化量为 ,不能越过 且越过 时会 坐标强制移动到 。设 为上述问题中走 步后到 位置的概率。
显然有 ,而根据问题定义容易写出 的 DP:
$$g_{i+1,\min(j+d,k)} \leftarrow g_{i,j} a_d \ \ (j+d \geq 0) $$
三:麻烦地算
设 ,那么根据递推式我们可以得到一个关于 的 元线性方程组。具体而言,对 都有:
而对于 的情况,会多一部分越过 强制到 而产生的贡献(称其为终点方程),不过形式上还是很相似的。
如此就得到了 条方程,将 设为一个未定元,由此 都可以表示为 的形式,可以依此递推出来。
最后根据「终点方程」解出 ,也就解出了所有 ,最后计算 即可。
四:更麻烦但更快地算
显然上述做法的时间复杂度是很大的,但是注意到 的方程是一个常系数齐次线性递推。根据其通项的性质,我们可以直接判断出 和 必然都是微分有限的幂级数。
为什么?这里以 的情况来说明。此时 的递推式是 阶常系数的,要得到其通项需要解一个 次的特征方程(不需要真的解出来,在计算中可以代数扩域),其解 自然也是代数幂级数,假设没有重根。
那么其通项
$$G_j(x) = \sum_{i=1}^6 (U_i(x) G_0(x) +V_i(x)) u_i^j $$显而易见,代数幂级数复合进微分有限幂级数中,结果仍然微分有限。对于有重根的情况,证明也是类似的。
现在就可以求出 (和 ) 的 ODE 或其系数的整式递推式(用含 的表达式以方便对所有 求解):
-
一种方法是 ODE 自动机,这在实现上可能比较复杂,不过有一些现成的模板可以参考。
-
另一种方法是求出前面一些项,然后用高斯消元找出整式递推式。但这种方法需要对多个 计算后,将递推式中的每个系数都对 做多项式插值。
设 ,可以证明 存在 阶、 次的整式递推,而递推系数中 的最高次数也是 的。
得到了 的 ODE 后,求出 的 ODE 就很简单了。直接对所有 把 的 ODE 中的系数全部加起来即可。
ODE 自动机的复杂度不太会分析,但是高斯消元法求出整式递推的复杂度是 的(要做 次才能插值,而每次需要求出 项解一个 元方程组,再算上消元本身的三次方时间)。
这样就可以做到 。
-
- 1
信息
- ID
- 11033
- 时间
- 5000ms
- 内存
- 1024MiB
- 难度
- 7
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者