E - Battles in a Row Editorial by nouka28


DP を考えます。

\(dp[h][m]:=(\) 体力が \(h\) 、魔力が \(m\) のときに倒せるモンスターの数の最大値 \()\) とします。

\(t=dp[h][m]\) として以下のような遷移を考えます。( 説明の都合上 \(A,B\) を 0-indexed として考えます。)

  • \(dp[h+1][m]\gets \max(dp[h+1][m],t)\)
  • \(dp[h][m+1]\gets \max(dp[h][m+1],t)\)
  • \(t< N\) ならば
    • \(dp[h+A_t][m]\gets \max(dp[h+A_t][m],t+1)\)
    • \(dp[h][m+B_t]\gets \max(dp[h][m+B_t],t+1)\)

\((h,m)\) の昇順に DP を行うことで、答えは \(dp[H][M]\) となります。

DP の遷移は \(O(1)\) なので、DP の計算量は \(O(HM)\) 、よって全体の計算量は \(O(HM+N)\) となります。( \(N\leq2\times 10^5\) でもこの問題を解くことができます。)

posted:
last update: