Cod sursa(job #2118304)

Utilizator AndreiSorin26012001Cirpici Andrei Sorin AndreiSorin26012001 Data 30 ianuarie 2018 14:35:50
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("oo.in");
ofstream out("oo.out");

int n;
int v[100005], d[100005];
int maxim1, maxim2, maxim3;

int main()
{

    in>>n;
    for( int i = 1; i <= n; i++ )
        in>>v[i];

    /// NU LUAM 1 SI NICI N
    d[1] = 0;
    d[2] = v[1] + v[2];
    d[3] = max( v[1] + v[2], v[2] + v[3] );

    for( int i = 4; i <= n; i++ )
        if( d[i - 1] <= v[i] + v[i - 1] + d[i - 3] )
            d[i] = v[i] + v[i - 1] + d[i - 3];
        else
            d[i] = d[i - 1];

    maxim1 = d[n - 1];

    /// LUAM 1 SI N

    d[1] =  v[1] + v[n];
    d[2] = max(v[n] + v[1], v[1] + v[2]);
    d[3] = max( v[3] + v[4], d[2] );

    for( int i = 4; i <= n; i++ )
        if( d[i - 1] <= v[i] + v[i - 1] + d[i - 3] )
            d[i] = v[i] + v[i - 1] + d[i - 3];
        else
            d[i] = d[i - 1];

    maxim2 = d[n - 2];

    /// LUAM N SI NU 1

    d[1] = 0;
    d[2] = 0;
    d[3] = v[2] + v[3];

    for( int i = 4; i <= n; i++ )
        if( d[i - 1] <= v[i] + v[i - 1] + d[i - 3] )
            d[i] = v[i] + v[i - 1] + d[i - 3];
        else
            d[i] = d[i - 1];

    maxim3 = d[n];

    out<<max( maxim1, max(maxim2, maxim3) );

    return 0;
}