Cod sursa(job #931168)

Utilizator ArmandNMArmand Nicolicioiu ArmandNM Data 28 martie 2013 00:56:46
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
//00:35
#include <fstream>
using namespace std;
ifstream f("oo.in");
ofstream g("oo.out");
int i,n,a[100005],oo[100005],best;

int maxim(int a, int b)
{
    if (a>b) return a;
    return b;
}

int main()
{
    f>>n;
    for (i=1;i<=n;i++)
        f>>a[i];

    a[n+1]=a[1];
    a[n+2]=a[2];

    //Ion aduna si ( )( )le din (a[1],a[2])
    oo[0]=0;
    oo[1]=0;
    oo[2]=a[1]+a[2];
    for (i=3;i<=n-1;i++)
        oo[i]=maxim(oo[i-1],oo[i-3]+a[i-1]+a[i]);
    best=maxim(best,oo[n-1]);

    //Ion aduna si ( )( )le din (a[2],a[3])
    oo[1]=0;
    oo[2]=0;
    oo[3]=a[2]+a[3];
    for (i=4;i<=n;i++)
        oo[i]=maxim(oo[i-1],oo[i-3]+a[i-1]+a[i]);
    best=maxim(best,oo[n]);

    //Ion aduna si ( )( )le din (a[3],a[4])
    oo[2]=0;
    oo[3]=0;
    oo[4]=a[3]+a[4];
    for (i=4;i<=n+1;i++)
        oo[i]=maxim(oo[i-1],oo[i-3]+a[i-1]+a[i]);
    best=maxim(best,oo[n+1]);

    //mai departe celelalte perechi vor fi adunate in functie de cazurile anterioare ^^

    g<<best;
    f.close();
    g.close();
    return 0;
}