很容易的想到根号分治,我们先考虑暴力做法。
用dp[i][j]表示从开始状态到第i个点有一个跳跃能力为j的doge的最少跳跃次数,暴力也是O(n^2)的。我们考虑稍微优化优化。
考虑根号分治,如果\(j\le \sqrt(n)\) 则最多有\(O(n\sqrt(n))\)个状态。否则每个j最多能到达\(\sqrt(n)\)个状态,最多是\(O(m\sqrt(n))\)个状态。所以状态数是\(O((n+m)\sqrt(n))\)级别。直接暴力01bfs就能过。
需要优化一点就是如果有重复的状态不能重复遍历,并且每次加入一个位置初始的doge只能加入一次,否则就与我们分析的状态数量不相符了。vis的话写一下哈希就行。
但是根号在n<=30000的时候竟然还被卡常了?哈希还过不了,写bitset才能过。
Submission:https://uoj.ac/submission/610079
标签:状态,Skyscrapers,Jakarta,doge,sqrt,APIO2015,根号,暴力 From: https://www.cnblogs.com/IceYukino/p/17188432.html