问题 Z: 石子合并

内存限制:128 MB 时间限制:2.000 S
评测方式:文本比较 命题人:
提交:568 解决:128

题目描述

在一个操场上摆放着一排n(n≤1000)堆石子。现要将石子有次序地合并成一堆。规定每次只能选相邻的2堆石子合并成新的一堆,并将新的一堆石子数记为该次合并的体力花费。试编程求出将n堆石子合并成一堆的最小花费。例如有3堆石子,数目依次为1,2,9。可以先将 1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为 12。所以总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。

输入

输入包括两行,第一行是一个整数n(1 <= n <= 1000),表示石子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1 <= ai <= 100)是第i堆石子的数目。

输出

输出包括一行,这一行只包含一个整数,也就是最小的体力耗费值。

样例输入 复制

3
1 2 9

样例输出 复制

15