EDPC L - Deque

両端取り

考え方

ABCでいうと、E問題級。

値というよりは範囲を広げていく動的計画法、通称区間 DP。
といっても、そこまで特殊な考えなわけではない。
左端と右端の位置を使った $2$ 次元の動的計画法で、初期値を入れる場所と継承の方向が少し独特なだけ。

まず、問題を少しわかりやすく言い換える。
太郎君は $X-Y$ を最大化しようとし、次郎君は最小化する、とあるが、これはわかりにくい。
太郎君は $X-Y$ を最大化しようとし、次郎君は $Y-X$ を最大化しようとする、の方がよい。

なぜなら、その変更によって、単純な対戦ゲームになるから。
各局面で、自分の全行動について「その行動で得る点 $-$ その後の最善手での結果」を求めればよい。
採用するのは、そのうちの最大値である。

終了パターンがある程度限られることもあり、バックトレースで考えることになる。

あとは、これをコードにすればよい。

計算量は $O(N^2)$。

入力例1での動作

入力を受け取る。

n: 4
a: {10, 80, 90, 30}

残っている区間ごとに、現在の手番の人の得点 $-$ 相手の得点の最大値を考える。

残りが $1$ つなら、それを取るしかない。
そのため、その値がそのまま得点差になる。

左端\右端 10 80 90 30
10 10 - - -
80 - 80 - -
90 - - 90 -
30 - - - 30

まず、$\{90,30\}$ が残っている場合を考える。

左端の $90$ を取ると、その後は相手が $30$ を取る。
この場合の得点差は $90-30=60$ である。

右端の $30$ を取ると、その後は相手が $90$ を取る。
この場合の得点差は $30-90=-60$ である。

大きい方を選ぶので、$\{90,30\}$ の得点差は $60$ となる。

次に、$\{80,90,30\}$ が残っている場合を考える。

左端の $80$ を取ると、残りは $\{90,30\}$ になる。
この区間では、次の手番の人が $60$ 点多く取れる。
したがって、今回の手番から見た得点差は $80-60=20$ である。

右端の $30$ を取ると、残りは $\{80,90\}$ になる。
この区間では、次の手番の人が $10$ 点多く取れる。
したがって、今回の手番から見た得点差は $30-10=20$ である。

どちらを選んでも $20$ なので、$\{80,90,30\}$ の得点差は $20$ となる。

同じ考え方で全ての区間を求めると、次の表になる。

左端\右端 10 80 90 30
10 10 70 20 10
80 - 80 10 20
90 - - 90 60
30 - - - 30

全体 $\{10,80,90,30\}$ の得点差は $10$ である。
したがって、答えは $10$。

注意点

答えは、int 型からはみ出る。
DP テーブルを含め、long long 型を用いること。

別解

特になし。