#ABC209F. 伐木

伐木

伐木

题目描述

NN 棵树从左到右排成一排。从左数第 ii 棵树(1iN1 \le i \le N)Tree ii 的高度为 HiH_i

现在按你喜欢的某种顺序砍掉全部 NN 棵树。形式上,你选择一个 (1,2,,N)(1, 2, \ldots, N) 的排列 PP,并按顺序对每个 i=1,2,3,,Ni=1, 2, 3, \ldots, N 执行以下操作:

砍掉 Tree PiP_i,即把 HPiH_{P_i} 设为 00,代价为 HPi1+HPi+HPi+1H_{P_i-1}+H_{P_i}+H_{P_i+1}

这里,假设 H0=0, HN+1=0H_0=0,\ H_{N+1}=0

换句话说,砍一棵树的代价是砍之前这棵树与相邻树的高度之和。

求使砍掉所有树的总体代价最小的排列 PP 的个数。由于个数可能很大,输出对 (109+7)(10^9+7) 取模的结果。

输入格式

输入按以下格式从标准输入给出:

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)

下面以 P=(1,3,2)P=(1,3,2) 为例展示砍树过程。

首先,砍掉 Tree 11,代价为 H0+H1+H2=6H_0+H_1+H_2=6

接着,砍掉 Tree 33,代价为 H2+H3+H4=6H_2+H_3+H_4=6

最后,砍掉 Tree 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) 取模后的结果。

数据范围

  • 1N40001 \le N \le 4000
  • 1Hi1091 \le H_i \le 10^9
  • 输入中所有值均为整数
难度 提高+/省选
通过率
尝试 0
已通过 0
ID
2668
类型
传统题
Time Limit
2000ms
Memory Limit
1024MiB
上传者
标签