頭良くなりたい人

文系大学生shadeのブログです。競技プログラミングや人文学の話題,受験ネタなど。

ABC140 C - Maximal Value

問題はこちら atcoder.jp

方針

N-1,N-2,... のように i を小さくしながら考えます。それぞれの i に対して A_{i+1} を最大にする貪欲法を用いています。ある A_i は B_i-1, B_i にのみ制約されるので,貪欲法で最適解が求まります。

アルゴリズムがほぼ分からないので雰囲気で言ってます。間違い等あればご指摘ください。)

コード

#include <bits/stdc++.h>
using namespace std;

int main(){
    int n;
    cin>>n;

    vector<int> a(n),b(n-1);
    for(int i=0; i<n-1; i++){
        cin>>b[i];
    }

    int sum=0;
    a[n-1]=b[n-2];

    for(int i=n-2; i>0; i--){
        if(b[i-1]>b[i]){
            a[i]=b[i];
        }else{
            a[i]=b[i-1];
        }
    }

    a[0]=b[0];

    for(int i=0; i<n; i++){
        sum+=a[i];
    }

    cout<<sum<<endl;
}