Cod sursa(job #33774)

Utilizator andrewgPestele cel Mare andrewg Data 19 martie 2007 19:59:22
Problema Oo Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.36 kb
const fin = 'oo.in';
      fout = 'oo.out';
      maxn = 100002;

var f:text;
    n,i,j,sol:longint;
    a,p0,p2:array[1..maxn]of longint;

procedure readdata;
begin
   assign(f,fin);
   reset(f);
   readln(f,n);
   for i:=1 to n do read(f,a[i]);
   close(f);
end;

function max(x,y:longint):longint;
begin
   if x>y then max:=x
          else max:=y;
end;

procedure solve;
begin
   p0[1]:=0;
   p2[1]:=0;
   for i:=2 to n-1 do
   begin
      j:=p0[i-1];
      if i>3 then j:=max(j,p2[i-3]);
      p2[i]:=j+a[i]+a[i-1];
      p0[i]:=j;
      if p2[i]>sol then sol:=p2[i];
   end;
   p0[1]:=0;
   p2[1]:=0;
   p0[2]:=0;
   p2[2]:=0;
   for i:=2 to n do
   begin
      j:=p0[i-1];
      if i>3 then j:=max(j,p2[i-3]);
      p2[i]:=j+a[i];
      if i<>2 then p2[i]:=p2[i]+a[i-1];
      p0[i]:=j;
      if p2[i]>sol then sol:=p2[i];
   end;
   p0[1]:=0;
   p2[1]:=0;
   p0[2]:=0;
   p2[2]:=0;
   p0[3]:=0;
   p2[3]:=0;
   for i:=4 to n+1 do
   begin
      j:=p0[i-1];
      if i>3 then j:=max(j,p2[i-3]);
      p2[i]:=j+a[i-1];
      if i<>n+1 then p2[i]:=p2[i]+a[i]
                else p2[i]:=p2[i]+a[1];
      p0[i]:=j;
      if p2[i]>sol then sol:=p2[i];
   end;
end;

procedure writedata;
begin
   assign(f,fout);
   rewrite(f);
   writeln(f,sol);
   close(f);
end;

begin
   readdata;
   solve;
   writedata;
end.