はまやんはまやんはまやん

hamayanhamayan's blog

Maximal Value [AtCoder Beginner Contest 140 C]

https://atcoder.jp/contests/abc140/tasks/abc140_c

解説

https://atcoder.jp/contests/abc140/submissions/7443482

なるべくA[i]を大きくするように考えたい。
A[i]中心に考えてみると、A[i]≦min(B[i-1],B[i])を満たす必要がありそう。
最大化したいので等式の場合を考えると、A[i]=min(B[i-1],B[i])である。
これで、A[2]~A[N-1]は定まる。
あとは、A[1]とA[N]だが、それぞれB[1]とB[N-1]に依存していて、その値未満にする必要性もないので、
A[1]=B[1], A[N]=B[N-1]とする。
その時のAの総和が答え。

int N, B[101];
//---------------------------------------------------------------------------------------------------
void _main() {
    cin >> N;
    rep(i, 1, N) cin >> B[i];

    int ans = 0;
    ans += B[1]; // A[1]
    rep(i, 2, N) ans += min(B[i - 1], B[i]); // A[2]~A[N-1]
    ans += B[N-1]; // A[N]
    cout << ans << endl;
}