【APIO2015】Jakarta Skyscrapers

很容易的想到根号分治,我们先考虑暴力做法。

用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

posted @ 2023-03-07 16:04  IceYukino  阅读(28)  评论(0)    收藏  举报