线性时间Huffman算法

Time Limit: 1000 ms Memory Limit: 65536 KiB

Problem Description

在一个操场的四周摆放着n 堆石子。每堆的石子数不超过10*n。现要将石子有次序地合并成一堆。规定每次只能选2 堆石子合并成新的一堆,合并的费用为新的一堆的石子数。
试设计一个线性时间算法,计算出将n堆石子合并成一堆的最小总费用。
对于给定n堆石子,计算合并成一堆的最小总费用。

Input

输入数据的第1 行是正整数n,表示有n堆石子。第2 行有n个数,分别表示每堆石子的个数。n≤100000。

Output

将计算出的最小总费用输出。

Sample Input

6
45 13 12 16 9 5

Sample Output

224

Hint

Source