AT_dp_n Slimes

题目描述

有 $N$ 只史莱姆排成一行。最初,从左到右第 $i$ 只史莱姆的大小为 $a_i$。 太郎君想要将所有史莱姆合成为一只。他会不断重复以下操作,直到只剩下一只史莱姆: - 选择左右相邻的两只史莱姆,将它们合成为一只新的史莱姆。合成前两只史莱姆的大小分别为 $x$ 和 $y$,合成后的史莱姆大小为 $x + y$。此时,太郎君需要支付 $x + y$ 的代价。合成前后,史莱姆们的相对位置不会发生变化。 请你求出太郎君需要支付的总代价的最小值。

输入格式

输入以如下格式从标准输入读入: > $N$ $a_1$ $a_2$ $\ldots$ $a_N$

输出格式

输出太郎君需要支付的总代价的最小值。

说明/提示

## 限制条件 - 所有输入均为整数。 - $2 \leq N \leq 400$ - $1 \leq a_i \leq 10^9$ ## 样例解释 1 可以按如下方式进行操作。用粗体表示正在合成的史莱姆。 - (**10**, **20**, 30, 40) → (**30**, 30, 40) - (**30**, **30**, 40) → (**60**, 40) - (**60**, **40**) → (**100**) ## 样例解释 2 例如,可以按如下方式进行操作: - (**10**, **10**, 10, 10, 10) → (**20**, 10, 10, 10) - (20, **10**, **10**, 10) → (20, **20**, 10) - (20, **20**, **10**) → (20, **30**) - (**20**, **30**) → (**50**) ## 样例解释 3 答案可能无法用 32 位整数型表示。 ## 样例解释 4 例如,可以按如下方式进行操作: - (7, 6, 8, 6, **1**, **1**) → (7, 6, 8, 6, **2**) - (7, 6, 8, **6**, **2**) → (7, 6, 8, **8**) - (**7**, **6**, 8, 8) → (**13**, 8, 8) - (13, **8**, **8**) → (13, **16**) - (**13**, **16**) → (**29**) 由 ChatGPT 4.1 翻译