B - お菓子の分割 Editorial
by
Mitsubachi
$2$ 人を人 $A,B$ とし、一番左の $1$ ミリメートルの部分を人 $A$ が取るとします。このとき、以下のようなDPを考えることができます。
このとき、初期値と遷移は以下のようになります。 $2$ 行目と $3$ 行目は切らない場合の遷移、 $4$ 行目は切る場合の遷移です。
- $dp[0][0][0] = 0$
- $dp[i+1][j+1][k]=\min(dp[i+1][j+1][k],dp[i][j][k])$ $(k=0)$
- $dp[i+1][j-1][k]=\min(dp[i+1][j-1][k],dp[i][j][k])$ $(k=1)$
- $dp[i+1][j-1][1-k]=\min(dp[i+1][j-1][1-k],dp[i][j][k]+t_i)$
よって、このDPは \(O(N^2)\) で解くことができます。メモリ制限はDPテーブルとして配列を \(2\) つ用意し、交互に更新を行うことで削減でき、実行時間の定数倍は更新において参照する \(j\) の値を徐々に増やすなどをすることで改善できます。
posted:
last update: