問題はこちら
問題概要
- コスト
を払い,人
を好きな位置に移動させる.
- コスト
を払い,人
を左端に移動させる.
- コスト
を払い,人
を右端に移動させる.
解説
それぞれの操作は元の位置によらないので,各人に対しての操作は高々
操作をしない人を決める(ただし番号は昇順)ことにより,他の人に対する操作が決まる.例として以下の問題を考える.

人,人
,人
を操作しないと決める(選ばれなかった人は必ず動かす)

人は左端に移動する操作,人
は好きな位置に移動する操作,人
は右端に移動する操作を行う.より一般的には,操作をしないと決めたすべての人よりも数が小さい人は左端に移動し,操作をしないと決めたすべての人よりも数が大きい人は右端に移動し,その他の人は好きな位置に移動する操作を行う必要がある.
番号の昇順に操作をしない人を選ぶように考えることで以下のようなDPで解ける.
「
番目まで決めて最後に人
を選んだときの最小コスト」とする.元の順番で人
より左側にいるような人
について,人
を選び,
となる人
は選ばないとすると
の最小値が
となる.ただし,人
を最初に選ぶときは
となる.
まとめると,.ただし,
は
かつ元の順番で人
が人
より左にいるような
の集合とする.
が高速に求められれば解ける.
の昇順に
みたいなものを求めるのは典型で,
の昇順にSegmentTreeの
の位置に
を入れていけば区間最小値を求める問題になって高速に解ける.
が求まれば,人
の後の人は選ばないと考えることで
の最小値が答えとなる.