Cod sursa(job #2280247)

Utilizator severutBogdan Sever-Cristian severut Data 10 noiembrie 2018 13:01:02
Problema Oo Scor 30
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <iostream>
#include <fstream>
#define NMAX 100001

using namespace std;

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

int n,maxim;
int p[NMAX+1],profit[NMAX+1];
int main()
{
    in>>n;
    for (int i=1;i<n;++i)
        in>>p[i];
    p[n+1]=p[1];
    for (int i=1;i<=n+1;++i)
        profit[i]=0;
    profit[1]=p[1]+p[n];
    for (int i=2;i<n;++i)
    {
        if(i-3>-1)
            profit[i]=max(profit[i-1],p[i]+p[i-1]+profit[i-3]);
        else
            profit[i]=max(profit[i-1],p[i]+p[i-1]);
    }
    maxim=max(profit[n-2],maxim);
    for (int i=1;i<=n+1;++i)
        profit[i]=0;
    profit[2]=p[1]+p[2];
    for (int i=3;i<=n;++i)
    {
        if(i-3>0)
            profit[i]=max(profit[i-1],p[i]+p[i-1]+profit[i-3]);
        else
            profit[i]=max(profit[i-1],p[i]+p[i-1]);
    }
    maxim=max(profit[n-1],maxim);
    for (int i=1;i<=n+1;++i)
        profit[i]=0;
    p[3]=p[2]+p[3];
    for (int i=4;i<=n+1;++i)
    {
        if(i-3>1)
            profit[i]=max(profit[i-1],p[i]+p[i-1]+profit[i-3]);
        else
            profit[i]=max(profit[i-1],p[i]+p[i-1]);
    }
    maxim=max(profit[n],maxim);
    out<<maxim;
    return 0;
}