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