ABC466 E - Range Flip

区間反転

考え方

問題を少し言いかえれば、これは単純な動的計画法の問題である。

カード列の $l$ 枚目から $r$ 枚目を裏返す操作をしていいとされている。
これは、実は、$l$ 枚目から右を全て裏返し、さらに $r+1$ 枚目から右を全て裏返すとも考えられる。
($r$ がカード列の右端の場合は、なにもしないことに相当する)

つまり、「あるカードから右を全て裏返す」を最大 $2K$ 回行って、最大値はいくつか?」を解けばよい。
厳密には偶数回限定であるが、何もしないに相当する操作も選べるため、実質的に奇数回も許される。

ということで、長さ $2K+1$ のテーブルを持ち、左から $1$ 枚ずつ見ながら更新していけばよい。
$i$ 番目のデータは、そこより左で反転を $i$ 回行った場合の最大値。
つまり、直前のデータの $i$ 回のデータと $i-1$ 回のデータの大きい方に、次のカードの値を足せばよい。

全てのカードを見終わった後で、テーブルの任意の位置にある値の最大値が答え。
計算量は $O(NK)$。

入力例1での動作

入力を受け取る。

n: 7
k: 2
a: {2, 6, 3, 9, 4, 7, 5}
b: {1, 9, 5, 2, 8, 3, 6}

$2K+1=5$ 個の状態を持つ。
最初は、反転の境界をまだ通過していない状態だけが $0$ である。

$$(0,-\infty,-\infty,-\infty,-\infty)$$

$1$ 枚目では、$0$ 回の状態からは表の値 $2$ を使う。
また、ここで反転を開始する場合は裏の値 $1$ を使う。

0回: 0+2=2
1回: 0+1=1

したがって、$1$ 枚目まで見た状態は次のようになる。

$$(2,1,-\infty,-\infty,-\infty)$$

$2$ 枚目では、例えば反転境界を $1$ 回通過した状態を考える。
$1$ 回のまま進む場合と、$0$ 回からここで反転する場合を比べる。

1回: max(1,2)+9=11
2回: max(-∞,1)+6=7

同様に更新を続けると、各カードを見た後の状態は次のようになる。

見た枚数 $0$ 回 $1$ 回 $2$ 回 $3$ 回 $4$ 回
$0$ $0$ $-\infty$ $-\infty$ $-\infty$ $-\infty$
$1$ $2$ $1$ $-\infty$ $-\infty$ $-\infty$
$2$ $8$ $11$ $7$ $-\infty$ $-\infty$
$3$ $11$ $16$ $14$ $12$ $-\infty$
$4$ $20$ $18$ $25$ $16$ $21$
$5$ $24$ $28$ $29$ $33$ $25$
$6$ $31$ $31$ $36$ $36$ $40$
$7$ $36$ $37$ $41$ $42$ $45$

最後の状態の最大値は $45$ なので、答えは $45$ となる。

注意点

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

別解

特になし。