Loading

U636457 刺客

\(f_i\) 表示第一次到达 \(i\) 的所用时间,初始 \(f_1 = 0\)

首先考虑运动的形态会是什么样子,应该是第一次走到 \(i\),然后不断的跳 \(p_i\),直到再一次走到 \(i\),再向 \(i + 1\) 走。

其实转移是很好转移的,你可以看做跳到 \(p_i\) 就是第一次走到 \(p_i\) 往回跳的过程,所以转移应该是:

\[f_{i + 1} = f_i + (f_i - f_{p_i}) + 2 \]

模拟即可。

具体来说,假设你第一次走到 \(i\),然后必定会跳回 \(p_i\),一直跳的过程中,会将 \([1, i]\) 里每个元素的遍历次数都变为偶数次,否则一定会向前跳而不会向后跳,因此,当我跳到 \(p_i\) 的时候,再往前跳的过程就跟第一次走到 \(p_i\) 没有区别了,那么这中间除了第一次到 \(p_i\) 之前的路程不会走之外,其它的路程都会走一遍。

这种题主要是想清楚过程,其实并不怎么困难。

posted @ 2025-11-28 20:13  Alexande  阅读(3)  评论(0)    收藏  举报