解法
シフトという操作が少しわかりづらいのですが、結局は
- 任意の要素を取り出し、別の任意の位置に挿入する(現時点より左に挿入するならコストは
、右であれば
)
という操作ができることになります。
ので、それぞれの要素を、 右側に移動してそろえる、左側に移動してそろえる、操作しない、の3パターンに割り振ればよいです。
右側に操作するか左側に操作するか、というのは、今作成中の順列で操作しなかった要素の右端を見ればよいです。
番目の要素まで並べた上で、操作しなかった要素の右端が
であるようなもののなかで可能な最小コスト
とします。
という遷移を行えばよいです。
が初期値、
が答えです。