時間制限:$5.0sec$ / メモリ制限:$1GB$
$N$ 軒の家が横一列に並んでおり、左から $i$ 番目の家を家 $i$ とします。
それぞれの家には価値と耐久性が決まっており、家 $i$ の価値は $A_i$ で、耐久性は $B_i$ です。
現在MAK君の勢力は $1\le i\le N$ を満たす家 $i$ です。MAK君の永遠のライバルであるculcul君はMAK君の勢力をなくそうと思いま した。
その方法は以下の通りです。なお、MAK君の勢力が $L\le i\le R$ を満たす家 $i$ だったとき、MAK君の勢力は $[L,R]$ と表すこと にします。
culcul君はできるだけ短い時間でMAK君の勢力をなくそうと思いました。MAK君の勢力をなくすためにかかる時間の最小値を求めてください。
なお、家をつぶす時間以外は無視できるものとします。
入力は以下の形式で標準入力から与えられる。
N
A_1 A_2 … A_N
B_1 B_2 … B_N
MAK君の勢力をなくすためにかかる時間の最小値を求めてください。
4
1 2 3 4
4 3 2 1
3
以下のように家をつぶしていくと、最も短い時間でMAK君の勢力をなくすことができます。
5
2 3 9 4 1
4 2 1 5 2
7
以下のように家をつぶしていくと、最も短い時間でMAK君の勢力をなくすことができます。
1
100000
100000
100000
家が$1$軒のみしかない場合もあります。
この問題は動的計画法を用いて解きます。$dp$ 配列を以下のように定義します。
$dp[l][r]:=$ MAK君の勢力が $[l,r]$ だった時に、勢力をなくすのにかかる時間の最小値
このように定義すると、求める答えは $dp[0][N]$ になります。単純な $dp$ の遷移方法としては、次につぶす家を決めたときのそれぞれのかかる時間の最小値を求めて、その中で一番小さい値を選ぶという方法があります。この方法では、つぶす家を決めた後に、MAK君の勢力範囲がどのようになるのかを累積和を用いて計算することにより、全体の計算量は $O(N^3)$ になります。$N\le 3000$ なので、このままではTLE してしまいます。ここで、次につぶす家を決定してMAK君の勢力範囲が変更される際、ある家を基準に $[l,i-1]$ から $[i+1,r]$ にMAK君の勢力範囲は変わります。このことを利用すると、遷移の際に求めたいものは区間の最小値であることがわかり、セグメント木をうまく用いることにより、毎回の遷移を $O(logN)$ で計算することができます。この方法を用いることにより、全体の計算量は $O(N^2logN)$ になり、実行時間には間に合います。なおメモリの制約に関しては、$1GB$ になっているため、メモリ制限も問題ありません。