問題はこちら
問題概要
長さを選び
を
にする.このとき,この操作を行う前の
分だけコストがかかる.
また,とする.
解説
なら
から操作を行う.
なら
から操作を行う.
ならどちらから行ってもいい.
という条件を満たすような操作列を数え上げたい.(適当に有向辺を張ったグラフのトポロジカルソートの数え上げのようなもの)
の昇順に
を左から並べていく(左のものから操作する).ここでは例として
を考える.

まず,を置く.

次にを置きたいが,
であるため
の右側に置くしかない.この場合並べ方は次の
通り.

次のは
であるため
の左側に置く.置き方は次の2通り.

残りも同様になので
は
の右側,
なので
は
の左側という風においていけばいい.
ここで重要になるのが,ある要素を置く方法の数を求めるのに必要なのが
が今まで並べた
要素のうち左から何番目に置かれているかという情報のみであるということ.これを状態として持ちながらDPできる.
を「
まで並べて,
が
番目にあるような並べ方の数」とすると遷移は以下の様になる.
の遷移について説明する.
既にまで並べられている列の
番目に
を入れる.

このとき,を入れた後に「
より
が左に置かれている」という条件が成り立つ必要があり,これが成り立っているようなものは
が
番目から
番目にある列であるので,
には
からの遷移がある.
他の遷移も同様に考えることができる.
これはいわゆる挿入DPというやつで順列の数え上げでよく使う.