Cod sursa(job #1526882)

Utilizator justsomedudePalade Thomas-Emanuel justsomedude Data 17 noiembrie 2015 16:17:57
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <fstream>
#define nmax 100007

using namespace std;

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

int n, d1[nmax], d2[nmax], d3[nmax], a[nmax];

void Citire()
{
    int i;
    fin>>n;
    for(i=1;i<=n;i++)
       fin>>a[i];
}

void Rezolva()
{
    int i,s,s1,s2,s3;
    d1[2] = a[1]+a[2];

    for(i=5;i<n;i++)
        d1[i] = a[i]+a[i-1]+max(d1[i-3],max(d1[i-4],d1[i-5]));

    d2[1] = a[1]+a[n];
    d2[4] = a[4]+a[3]+d2[1];

    for(i=5;i<n-1;i++)
        d2[i] = a[i]+a[i-1]+max(d2[i-3],max(d2[i-4],d2[i-5]));

    d3[n] = a[n]+a[n-1];
    d3[3] = a[3]+a[2]+d3[n];
    d3[4] = a[4]+a[3]+d3[n];

    for(i=5;i<n-2;i++)
        d3[i] = a[i]+a[i-1]+max(d3[i-3],max(d3[i-4],d3[i-5]));

    s1 = max(d1[n-1], max(d1[n-2],d1[n-3]));
    s2 = max(d2[n-2], max(d2[n-3],d2[n-4]));
    s3 = max(d3[n-3], max(d3[n-4],d3[n-5]));


    s = max(s1,max(s2,s3));

    fout<<s<<"\n";
}

int main()
{
    Citire();
    Rezolva();
    fout.close();
    return 0;
}