Cod sursa(job #990072)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 27 august 2013 13:07:02
Problema Oo Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include <fstream>
using namespace std;
ifstream f("oo.in");
ofstream g("oo.out");
int n;
long long v[100011],a[100011],sol;

inline long long maxim(long long c,long long b){
    return (c>b?c:b);
}

int main(void){
    register int i,j;

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

    //I:Luam oo din primele doua sectoare
    v[1]=0;
    v[2]=a[1]+a[2];
    v[3]=v[4]=v[2];
    for(i=5;i<n;i++)
        v[i]=maxim(v[i-1],v[i-3]+a[i-1]+a[i]);
    sol=v[n-1];

    //II:Nu luam oo din primul sector
    v[2]=0,v[3]=a[2]+a[3];
    v[4]=maxim(v[3],a[3]+a[4]);
    for(i=5;i<=n;i++)
        v[i]=maxim(v[i-1],v[i-3]+a[i]+a[i-1]);
    sol=maxim(sol,v[n]);

    //III:Luam din primul si ultimul sector
    //deplasarea
    a[n+1]=a[1];
    for(i=1;i<=n;i++)
        a[i]=a[i+1];

    v[1]=0,v[2]=a[1]+a[2];
    v[3]=v[4]=v[2];
    for(i=5;i<=n;i++)
        v[i]=maxim(v[i-1],v[i-3]+a[i]+a[i-1]);
    sol=maxim(sol,v[n]);

    g<<sol;

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