ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

HUPC2020Day3 G Katsusando

問題
提出コード

解法

まず、二人が出会う地点は必ずカツが置いてある座標になります。途中で挟むとしても、左右どちらかのカツで出会うように適切に調整することで損をすることはありません。

  • dp[i] = 左からi番目のカツまで食べ終えた状態のときに経過した時間の最小値

としてこれを解こうとします。
今、j番目のカツの座標で次のカツサンドを作成するとします。また、

  • d_{(i,j)} = i番目のカツに誰かを配置して、j番目のカツに移動させたときにかかる時間

とします。これはO(N^{2})で計算できます。i,jはどちらが大きくても問題ないです。

そのとき、左側における行動の最適解はmin\left(dp[p] + d_{(p+1,j)}\right)になります。この時間をTとします。これが求まると、
dp[i] = min\left(dp[i], T + d_{(i,j)} + K + 1\right)
という計算をしていくことで、dpの計算ができます。
あとは、dp[N]を答えれば終了です。
コストを求める前計算、dpの計算共にO(N^{2})になります。

感想

カツを挟む部分を決め打った場合に更新が楽にできるようになり、これはあまり普段使わない考え方だったので面白かったです。