由于上下走不限制,所以按照贪心,我们应该尽可能走上下方向. 我们可以开一个双端队列,并认为每次提取队首的时候得到的是到达该点的最优策略.(这个一定是唯一的,因为不可能向右走几格,然后再退回去. ) 那么如果向上下走是不损失的,所以将上下的格子推进队首,优先扩展,然后将左右推进队尾,最后扩展. 这个贪心是正确的,可以保证每一个格子被扩展时都是最优策略. #include<bits/stdc++.h> #define maxn 2003 using namespace std; void setI…