简要题意:
给定 a i a_i ai,求从 A A A 节点走到 B B B 节点的最小步数。若当前在 i i i 节点,则可以一步到达 i − a i i-a_i i−ai 或 i + a i i+a_i i+ai 节点。(如果不合法则不走)
首先这题肯定是搜索,具体怎么搜因人而异。
因为我比较喜欢朴素的 dfs \texttt{dfs} dfs,因此就说说做法。
显然,如果你打下一个这样的搜索:
inline void dfs(int dep,int bs) {
if(dep<1 || dep>n) return;
if(bs==B) {
ans=min(ans,bs);return;}
dfs(dep+a[dep],bs+1);
dfs(dep-a[dep],bs+1);
}
你觉得没有任何问题,但是交上去 TLE \texttt{TLE} TLE 了。
给出一组数据 hack \text{hack}