atcoder#ABC209F. [ABC209F] Deforestation

[ABC209F] Deforestation

配点 : 600600

問題文

NN 本の木が左右一列に並んでおり、左から i(1iN)i\, (1 \leq i \leq N) 本目の木 ii の高さは HiH_i です。

あなたは、好きな順番でこれら NN 本の木を全て伐採します。具体的には、 (1,2,,N)(1,2, \ldots, N) の並び替えによって得られるある順列 PP について、i=1,2,3,...,Ni=1,2,3,...,N の順に、

  • HPi1+HPi+HPi+1H_{P_i-1}+H_{P_i}+H_{P_i+1} のコストを支払った後、木 PiP_i を伐採する。すなわち、HPiH_{P_i}00 にする。

という操作を行います。ただし、H0=0,HN+1=0H_0=0,H_{N+1}=0 とします。

言い換えると、ある木を伐採するのにかかるコストは木を伐採する直前での、その木と両隣の木の高さの総和となります。

支払うコストの総和が最小となるような PP の個数を求めてください。答えは非常に大きくなる可能性があるので、(109+7)(10^9+7) で割った余りを出力してください。

制約

  • 1N40001 \leq N \leq 4000
  • 1Hi1091 \leq H_i \leq 10^9
  • 入力は全て整数

入力

入力は以下の形式で標準入力から与えられる。

NN

H1H_1 H2H_2 \ldots HNH_N

出力

支払うコストの総和が最小となるような PP の個数を (109+7)(10^9+7) で割った余りを出力せよ。

3
4 2 4
2

支払うコストの総和が最小となるような PP は、(1,3,2)(1,3,2)(3,1,2)(3,1,2)22 つです。以下、木の伐採の例を示します。

P=(1,3,2)P=(1,3,2) のとき

  • 最初に木 11 を伐採する。この時に支払うコストは H0+H1+H2=6H_0+H_1+H_2=6 である。
  • 次に木 33 を伐採する。この時に支払うコストは H2+H3+H4=6H_2+H_3+H_4=6 である。
  • 最後に木 22 を伐採する。この時に支払うコストは H1+H2+H3=2H_1+H_2+H_3=2 である。

支払うコストの総和は 1414 となります。

3
100 100 100
6
15
804289384 846930887 681692778 714636916 957747794 424238336 719885387 649760493 596516650 189641422 25202363 350490028 783368691 102520060 44897764
54537651

(109+7)(10^9+7) で割った余りを出力することに注意してください。