小y的纸牌
题号:NC22616
时间限制:C/C++/Rust/Pascal 3秒,其他语言6秒
空间限制:C/C++/Rust/Pascal 128 M,其他语言256 M
64bit IO Format: %lld

题目描述

小y得到了一摞n张纸牌,每张纸牌上面都写着一个数字。
现在小y要把这摞纸牌分成两摞。
分牌的方法如下:
假设最开始的那摞纸牌为A,要分成B,C两摞。
他每次会拿起A中最上面的一张纸牌,将其放到B或C的最上面。直到A中的纸牌被取完。(显然,取到的牌的顺序是一定的)。
对于分成的B摞和C摞纸牌,其中的每张纸牌的代价都是它和下面所有的纸牌中,所写数字最大的那个纸牌上所写的数字。
举个例子:
假如分成的B摞纸牌从下往上的纸牌依次是:2,4,1,3,5
那么这5张纸牌的代价依次是:2,4,4,4,5。
C摞同理
他想要找到一种方法使得分成的两摞纸牌的代价和最小,你只需输出这个代价即可。

输入描述:

第一行一个正整数n,表示纸牌的个数。
第二行n个用空格隔开的非负整数,第i个数字a_i表示从上往下数第i张纸牌上面的数字。

输出描述:

一行一个整数,表示最小代价。
示例1

输入

复制
5
5 2 4 5 1

输出

复制
19

说明

把5 4 5分为一摞,2 1分为一摞,第一摞的权值为5+5+5, 第二摞为2+2, 总和为19.
示例2

输入

复制
3
1 3 1

输出

复制
5

说明

把3分为一摞,1 1分为一摞
示例3

输入

复制
10
1 2 5 4 5 5 7 5 9 10

输出

复制
53

说明

把1 2 5 5 5 7 9 10分为一摞,把4 5分为一摞

备注: