AtCoder Beginner Contest 274 E問題 Booster
問題
提出解答
問題の概要
2次元座標上に 個の街と 個のブースターがある. 番目の街は座標 にあり, 番目のブースターは にある.
ブースターを 個獲得するごとに移動速度が 倍になる.
最初, 原点にいる高橋君が全ての街を訪れ, 原点に戻るような移動の方法において, 所要時間の最小値を求めよ (ブースターは全て取得しなくても良い).
制約
- は互いに異なる.
解法
を原点, 街, ブースターのある地点からなる 要素の集合とし, をブースターのある地点からなる の部分集合とする.
bitDP による動的計画法を考える. の部分集合 と に対して, を
- を全て訪れ, 最後に訪れるのが であるような移動の方法における最小値.
ベースケースは原点をスタート, ゴールにしたいので, 原点を として, 便宜上次のようにする.
更新式について, 座標平面は距離について三角不等式を満たすことに注意すると, 1度訪れた地点を再び訪れるメリットはない. よって, に対して, の時点で獲得しているブースターの数は で計算できる.
このことに注意すると,
である.
これにより, 求めるべき解答は街と原点全体の集合を とすると,
になる.