mini notes

競技プログラミングの解法メモを残していきます。

ABC158 F - Removing Robots

問題:F - Removing Robots

解答:Submission #14877202 - AtCoder Beginner Contest 158

解法:ロボットを座標順にソートする。

f(i):i番目のロボットを動かそうとしたとき、連鎖的にどこまでのロボットが動くか の関数とする。
このとき、iが直接動かせるロボットを[i+1, j]とすると、f(i) = max(f(i+1), ..., f(j))となる。よってfは後ろから求めることができる。区間最大はセグメント木で取得できる。

dp[i]:i番目以降のロボットの残り方の通り数とすると、dp[i] = dp[f(i)+1] + dp[i+1] となる。足し算の前項はi番目のロボットを動かしたときの通り数で、後項はi番目のロボットを動かさなかったときの通り数である。後ろから算出し、dp[0]が答えとなる。