-
题目描述
-
给你一个序列a1; a2; :::; an。我们能够对这个序列进行reduce(i)操作,这个操作将ai和ai+1替换成max(ai; ai+1),产生一个更短的序列。这个操作的花费是max(ai; ai+1)。当进行了n-1次reduce(i)操作后,我们便得到一个长度为1的序列。现在我们的任务是计算最优花费,即用最小的花费将长度为n的序列进行一系列reduce操作使其变为长度为1的序列。
-
知识点
-
输入
-
第一行有一个正整数n(1 <= n <= 1; 000; 000),表示初始序列的长度。以下n行,每一行包含一个整数ai,代表初始序列中的第i个元素(0 <= ai <= 1; 000; 000; 000)。
-
输出
-
仅一行,包含一个整数,表示最小的花费。
-
样例输入
-
3
1
2
3
-
样例输出
- 5
-
#include<stdio.h> long long max(long long a, long long b) { return a>b? a:b; } int main() { long long n,i,value; long long a1,a2; while(scanf("%lld", &n) != EOF) { value = 0; if(n == 1) { scanf("%lld", &a1); printf("0\n"); continue; } scanf("%lld", &a1); for(i = 1; i < n; i++) { scanf("%lld", &a2); value +=max(a1,a2); a1 = a2; } printf("%lld\n", value); } return 0; }