一句话题意:N个数,首尾不相连。进行n-1次合并,规则为1.相邻2.合并后数值为两者大值 3.代价为该大数值 求最小代价 解 一 一个数列 如 2 3 1 4 5 在其中任选两个相邻的数值,其最小代价为二者取max 其余各数对选的这两个数所产生的影响只会有两种情况 1.增加代价 2.不变 二 现要证的是如何保证任意一组数据都有至少一种满足第一步的方案。如给定的 2 3 1 4 5 如相邻两两取max 则为 3 3 4 5 从小往大取,即可保证最优。 三 最后只需按顺序扫一遍即可 时间复杂度O(n)

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int tmp;
int N,x;
int Ans;
int main() {
  freopen("seq.in","r",stdin);
  freopen("seq.out","w",stdout);
    scanf("%d%d",&N,&x);
    long long Ans = 0;
    for (int i = 1; i < N; ++ i) {
     scanf("%d",&tmp);
     Ans += max(x, tmp);
     x = tmp;
    }
    printf("%lld\n", Ans);
    fclose(stdin);
    fclose(stdout);
}