6.17 CW 模拟赛 T1. Jump
前言
这题赛时是过了的, 非常磕磕绊绊, 在这理一下
思路
首先题解做法
不难发现每次落脚只可能是在萝卜或者大跳的位置
其中「大跳的位置」是不好维护的
这个时候我们发现只要指定要在哪些位置落脚, 大跳的数量是可以确定的, 于是这样列出 \(\rm{dp}\), 用一些技巧优化
然后我的做法比较神奇
不难考虑到按照每个点\((\)包括没有萝卜的位置\()\)来进行 \(\rm{dp}\), 缺点是点数过多
观察到一个性质:
\[f_i - A + B \to f_j \\
f_i - 2A + B \to f_{j + D} \\
f_i - 3A + B \to f_{j + 2D} \\
\cdots
\]
把原串按照 \(D\) 为一段分段, 那么段 \(x\) 的初始话费就是 \(Ax\), 我们统计萝卜的贡献即可, 每次经过这个萝卜之后需要多跳一次和少跳一次的位置都可以在每一个段的相对位置处表示出来
总结
观察到我们的跳跃路径可以简单的用经过哪些位置来刻画, 经过位置之间的花费容易计算
于是可以 \(\rm{dp}\)
这可能是一个思维漏洞: 如果确定要经过一些位置, 那么在这些位置之间, 尽量使得跳跃次数尽量少, 也就是每次尽量跳跃的更远
一个点的贡献是否应该被使用的问题, 往往可以用 \(dp_i\) 表示使用 \(i\) 且作为结尾来解决

浙公网安备 33010602011771号