SRM579 div1 450

問題

店がN個あり、0からインデクスがふってある。


0〜M-1の店に興味があり、そこで商品を買いたい(1度だけ購入することができる)。
興味のあるお店については、開店時間、閉店時間、買い物にかかる時間が与えられる。
また、いくつかの店間には道があり、その移動時間も与えられる。


最初(時間0)では、店N-1にいる。
そこからスタートし、できるだけ興味のあるお店の商品を買いたい。
最大で買える商品数を答える。

考え方

問題を「各店間の距離を求める」と「興味のある店をできるだけ回る」の2つに分ける。
前者は全点間最短距離、後者はbitDPで求められる。



各点間の距離は、ワーシャルフロイドで全点間最短距離を求められるので、求める。


興味のある店をできるだけ回るは、同じ店で2回以上購入することがないので、
単純に
 dp[今いる店][今まで訪れた店集合]=かかった時間の最小時間
のbitDPになる。


まず、N-1から興味がある各店へ行ける場合、そこでまず購入できるので、
 そこへの移動時間+開店までの待ち時間+購入時間
をdp[i][1<