AT_abc209_f [ABC209F] Deforestation

题目描述

有 $N$ 棵树从左到右排成一列,从左起第 $i$ 棵树的高度为 $H_i$。 你可以以任意顺序将这 $N$ 棵树全部砍倒。具体来说,对于通过排列 $(1,2,\ldots,N)$ 得到的某个排列 $P$,依次按照 $i=1,2,3,\ldots,N$ 的顺序: - 先支付 $H_{P_i-1} + H_{P_i} + H_{P_i+1}$ 的代价,然后将第 $P_i$ 棵树砍倒,即将 $H_{P_i}$ 变为 $0$。 这里规定 $H_0=0, H_{N+1}=0$。 换句话说,砍倒某棵树所需的代价,是在砍倒前该树及其相邻两棵树的高度之和。 请你求出,使得支付的总代价最小的排列 $P$ 的个数。由于答案可能非常大,请输出对 $10^9+7$ 取模后的结果。

输入格式

输入以如下格式从标准输入读入: > $N$ $H_1$ $H_2$ $\ldots$ $H_N$

输出格式

输出使得总代价最小的排列 $P$ 的个数,对 $10^9+7$ 取模后的结果。

说明/提示

## 限制条件 - $1 \leq N \leq 4000$ - $1 \leq H_i \leq 10^9$ - 输入均为整数 ## 样例解释 1 使总代价最小的排列 $P$ 有 $(1,3,2)$ 和 $(3,1,2)$ 共 $2$ 种。以下是砍树的示例: 当 $P=(1,3,2)$ 时: - 首先砍倒第 $1$ 棵树,此时支付的代价为 $H_0+H_1+H_2=6$。 - 接着砍倒第 $3$ 棵树,此时支付的代价为 $H_2+H_3+H_4=6$。 - 最后砍倒第 $2$ 棵树,此时支付的代价为 $H_1+H_2+H_3=2$。 总代价为 $14$。 ## 样例解释 3 请注意要输出对 $10^9+7$ 取模后的结果。 由 ChatGPT 4.1 翻译