EDPC N - Slimes

スライム

考え方

ABCでいうと、E問題級。

基本的にはただの区間 DP で、L 問題と同じように解けばよい。
ただし、「今回の合体コスト」を計算するときに長大な和を取る必要がある。
そのため、累積和のアルゴリズムを同時に用いる。

dp[l][r] を、l 番目から r 番目までのスライムを合体させる場合の最小コストとする。
最後に合体する境界を全パターン試すと、次の形になる。

dp[l][r] = min(dp[l][m-1] + dp[m][r]) + 区間全体の大きさ

区間全体の大きさは、累積和を使って求めればよい。

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

入力例1での動作

入力を受け取る。

n: 4
a: {10, 20, 30, 40}

区間の大きさをすぐ求められるように、累積和を作る。

{0, 10, 30, 60, 100}

例えば $\{30,40\}$ の大きさは、累積和の差 $100-30=70$ で求められる。

区間ごとに、その範囲のスライムを $1$ 匹にまとめる最小コストを考える。

スライムが $1$ 匹だけなら、合体する必要がない。
そのため、コストは $0$ である。

左端\右端 10 20 30 40
10 0 - - -
20 - 0 - -
30 - - 0 -
40 - - - 0

まず、$\{30,40\}$ の区間を考える。

この $2$ 匹を最後に合体させるしかない。
区間全体の大きさは、累積和から $100-30=70$ である。
したがって、最小コストは $70$ となる。

次に、$\{20,30,40\}$ の区間を考える。

最後の合体の直前には、$\{20\}$ と $\{30,40\}$ に分かれている場合がある。
この場合、それまでのコストは $0+70=70$ である。

もう一つは、$\{20,30\}$ と $\{40\}$ に分かれている場合である。
この場合、それまでのコストは $50+0=50$ である。

区間全体の大きさは、累積和から $100-10=90$ である。
したがって、最小コストは $50+90=140$ となる。

最後に、全体 $\{10,20,30,40\}$ を考える。
最後の合体の直前の分け方は $3$ 通りある。

分け方 左側 右側 それまでのコスト
$\{10\}\mid\{20,30,40\}$ $0$ $140$ $140$
$\{10,20\}\mid\{30,40\}$ $30$ $70$ $100$
$\{10,20,30\}\mid\{40\}$ $90$ $0$ $90$

この中では $90$ が最小である。

全体の大きさは、累積和から $100-0=100$ である。
最後の合体コストとしてこれを加えるので、最小コストは $90+100=190$ となる。

全ての区間について求めると、次の表になる。

左端\右端 10 20 30 40
10 0 30 90 190
20 - 0 50 140
30 - - 0 70
40 - - - 0

全体の最小コストは $190$ である。
したがって、答えは $190$。

注意点

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

別解

特になし。