Cod sursa(job #849590)

Utilizator Athena99Anghel Anca Athena99 Data 7 ianuarie 2013 12:33:05
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <cassert>

const int dim=100005;

int main()
{
    int n=0,i=0,max=0,v[dim],cmb[dim];
    cmb[0]=cmb[1]=0;

    assert(freopen("oo.in","r",stdin));
    assert(freopen("oo.out","w",stdout));

    assert(scanf("%d",&n));
    for (i=1; i<n+1; ++i)
        assert(scanf("%d",&v[i]));

    v[n+1]=v[1];
    cmb[2]=v[1]+v[2];
    i=3;

    while (i<n)
    {
        if (cmb[i-1]>v[i-1]+v[i]+cmb[i-3])
            cmb[i]=cmb[i-1];
        else
            cmb[i]=v[i-1]+v[i]+cmb[i-3];
        ++i;
    }

    max=cmb[n-1];
    cmb[2]=0;
    cmb[3]=v[2]+v[3];
    i=4;

    while (i<n+1)
    {
        if (cmb[i-1]>v[i-1]+v[i]+cmb[i-3])
            cmb[i]=cmb[i-1];
        else
            cmb[i]=v[i-1]+v[i]+cmb[i-3];
        ++i;
    }

    if (cmb[n]>max)
        max=cmb[n];

    cmb[3]=0;
    cmb[4]=v[3]+v[4];
    i=5;

    while (i<n+2)
    {
        if (cmb[i-1]>v[i-1]+v[i]+cmb[i-3])
            cmb[i]=cmb[i-1];
        else
            cmb[i]=v[i-1]+v[i]+cmb[i-3];
        ++i;
    }

    if (cmb[n+1]>max)
        max=cmb[n+1];

    assert(printf("%d\n",max));

    return 0;
}