#2594. 切割木板

切割木板

题目描述

FarmerJohn\red{Farmer John}想修理牧场栅栏的某些小段。为此,他需要N(1<=N<=20,000)\red{N(1<=N<=20,000)}块特定长度的木板,第i\red{i}块木板的长度为Li(1<=Li<=50,000)\red{Li(1<=Li<=50,000)}

然后,FJ\red{FJ}去买了一块很长的木板,它的长度正好等于所有需要的木板的长度和.接下来的工作,当然是把它锯成需要的长度。FJ\red{FJ}忽略所有切割时的损失\red{--}你也应当忽略它。

FJ\red{FJ}郁闷地发现,他并没有锯子来把这块长木板锯开。于是他把这块长木板带到了FarmerDon\red{Farmer Don}的农场,想向FD\red{FD}借用锯子。 作为一个有商业头脑的资本家,FarmerDon\red{Farmer Don}没有把锯子借给FJ\red{FJ,}而是决定帮FJ\red{FJ}锯好所有木板,当然FJ\red{FJ}得为此付出一笔钱。锯开一块木板的费用,正比于木板的长度。

如果这块木板的长度是21\red{21,}那么锯开它的花费便是21\red{21}美分。 谈妥条件后,FD\red{FD}FJ\red{FJ}决定切割木板的顺序,以及每次切割的位置。

请你帮FJ\red{FJ}写一个程序,计算为了锯出他想要的木板,他最少要花多少钱。很显然,按不同的切割顺序来切开木板,FJ\red{FJ}的总花费可能不同,因为不同的切割顺序, 会产生不同的中间结果。

输入格式

1\red{1}行: 一个正整数N\red{N,}表示FJ\red{FJ}需要木板的总数

2..N+1\red{2..N+1}行: 每行包含一个整数,为FJ\red{FJ}需要的某块木板的长度

输出格式

1\red{1}行: 输出一个整数,即FJ\red{FJ}完成对木板的N1\red{N-1}次切割的最小花费

样例

输入样例

3
8
5
8

输出样例

34

提示

FJ\red{FJ}打算把一块长为21\red{21}的木板切成长度分别为8\red{8,}5\red{5,}8\red{8}的三段。

输出说明:

起初,木板的长度为21\red{21}。第一次切割木板花费21\red{21}美分,把木板切成长分别为13\red{13}8\red{8}的两块。

然后花费13\red{1 3}美分把长为13\red{13}的木板切成长为8\red{8}5\red{5}的两块。这样的总花费是21+13=34\red{21+13=34}美分。

如果第一次把木板切成长 为16\red{16}5\red{5}的两块,那么第二次切木板的花费就是16\red{16}美分,这样的总花费就是37\red{37}美分,比刚才花费34\red{34}美分的方案来的差。