题意
分析
-
记 g(d,x,y) 表示从 (x,y) 出发,方向为 d 到达的点,这个可以通过记忆化搜索求出,注意如果转移成环(此时向这个方向走没有意义)要特判。
-
记 f(l,r,x,y) 表示 ([l,r]) 的机器人同时位于 (x,y) 最少需要花费多少步,根据题意容易得到转移:
[egin{cases}f(l,r,x,y)=minlimits_{i=l}^{r-1}{f(l,i,x,y)+f(i+1,r,x,y)}\f(l,r,x,y)=minlimits_{g(d,a,b)=(x,y)} {f(l,r,a,b)} end{cases} ]其实这就是一个斯坦纳树形象的表现形式。
-
朴素的 (dijkstra) 写完之后会 TLE。似乎此题还有一个没有用到的潜在条件:最短路的边权是1。
想法类似 noip2016蚯蚓 。首先将所有初始点按照 f 排序放到队列,由于边权是1,我们可以保证新加入队列的点的 f 一定是单调不降的,此时我们可以维护两个有序的队列 q1, q2,其中 q1 是所有初始点,q2 是更新得到的点,仍然跑 dijk ,这样常数会小很多(如果采用桶排会更快?)。