AOJ 2254 - 最短ルート
解法
制約を見ればbitDPと書いてあるのでbitDPをすることにします。
まず、番のステージをクリアした後に、再び番目のステージを行くことは考えなくていいです。2回以上同じステージに行くことで得をすることはありません。
ということで、すでにクリアしたステージをビットで持つことを考えます。
クリアしたステージの集合をとします。
- 現在クリアしたステージがの状態のときに、ここからすべてのステージをクリアするまでにかかる時間の最小値
とします。初期値は、すなわち全てのステージをクリアした際、それ以降かかる時間は0ということです。
を埋めることを考えると、この状態から次に選ぶステージは、の段階でまだビットが立っていないステージです。
そして、選べる装備は、すでにクリアステージのものなので、の段階でビットが立っているステージ、もしくは装備なしです。
ということで、
(ただし、 , )
となります。
あとはこれを計算すれば、、つまりまだ何もステージをクリアしていないときにかかる時間の最小値を参照すれば答えとなります。
感想
bitDPの解説を書く際、どのような表記がいいのかよくわからないです。状態を表しているので集合で表記してみたのですが、これはこれで小難しい感じがします(ただ、遷移の部分を2進数で書くとごちゃごちゃしてしまうので、それはそれで微妙です)。