Cod sursa(job #2421918)

Utilizator herbertoHerbert Mohanu herberto Data 16 mai 2019 18:01:17
Problema Oo Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<bits/stdc++.h>
using namespace std;
#define MAXN 100001

int v[MAXN], d[MAXN][3];
int main(){
  FILE*fin=fopen("oo.in", "r");
  FILE*fout=fopen("oo.out", "w");
  int n, i, ans1, ans2, ans3;
  fscanf(fin, "%d", &n);
  for(i=1; i<=n; i++)
    fscanf(fin, "%d", &v[i]);
  //d[i][2]=d[i-1][1]+v[i];
  //d[i][1]=d[i-1][0]+v[i];
  //d[i][0]=max(d[i][0], d[i][2]);
  d[1][0]=0; d[1][1]=v[1]; d[1][2]=0;//iei pe primu nu iei pe ult
  for(i=2; i<=n; i++){
    d[i][0]=max(d[i-1][0], d[i-1][2]);
    d[i][1]=d[i-1][0]+v[i];
    d[i][2]=d[i-1][1]+v[i];
  }
  ans1=max(d[n-1][0], d[n-1][2]);//iei pe ult nu iei pe primu
  for(i=1; i<=n; i++)
    d[i][0]=d[i][1]=d[i][2]=0;

//  printf("%d ", ans1);
  d[2][0]=0; d[2][1]=v[2]; d[2][2]=0;
  for(i=3; i<=n; i++){
    d[i][0]=max(d[i-1][0], d[i-1][2]);
    d[i][1]=d[i-1][0]+v[i];
    d[i][2]=d[i-1][1]+v[i];
  }
  ans2=max(d[n][0], d[n][2]);
  for(i=1; i<=n; i++)
    d[i][0]=d[i][1]=d[i][2]=0;

  d[3][0]=0; d[3][1]=v[3]; d[3][2]=0;//iei si pe ult si pe primu
  for(i=4; i<=n; i++){
    d[i][0]=max(d[i-1][0], d[i-1][2]);
    d[i][1]=d[i-1][0]+v[i];
    d[i][2]=d[i-1][1]+v[i];
  }
  ans3=d[n][1]+v[1];

  fprintf(fout, "%d", max(ans3, max(ans1, ans2)));
  return 0;
}