Cod sursa(job #279518)

Utilizator Sorin_IonutBYSorynyos Sorin_Ionut Data 12 martie 2009 20:57:16
Problema Oo Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <iostream.h>
#include <fstream.h>

#define IN "oo.in"
#define OUT "oo.out"
#define DIM 1555

ifstream fin(IN);
ofstream fout(OUT);

long n;
long sol;
long oua[DIM];
long dinamic[DIM];

inline long maxim(long,long);

int main()
{
 long i;

 fin>>n;
 for(i=4;i<=n+3;i++)
  fin>>oua[i];
 fin.close();                /// am 3 posib de inceput 1)1->2, 2)2->3, 3)1->n /// explic in ginfo
			     /// (1 2 1) 3 4 0 1 0 6 7 (1 2 1) ->
 oua[1]=oua[n+1];
 oua[2]=oua[n+2];
 oua[3]=oua[n+3];

 ////////////////////// caz 1 //////////////////
 for(i=3;i<=n;i++)
  dinamic[i]=maxim(dinamic[i-1],dinamic[i-3]+oua[i]+oua[i-1]);
 sol=maxim(sol,dinamic[n]);

 ////////////////////// caz 2  //////////////////////
 for(i=0;i<=n+1;i++)
  dinamic[i]=0;
 for(i=4;i<=n+1;i++)
  dinamic[i]=maxim(dinamic[i-1],dinamic[i-3]+oua[i]+oua[i-1]);
 sol=maxim(sol,dinamic[n+1]);

 ///////////////////// caz 3 ////////////////////////////////
 for(i=0;i<=n+2;i++)
  dinamic[i]=0;
 for(i=5;i<=n+2;i++)
  dinamic[i]=maxim(dinamic[i-1],dinamic[i-3]+oua[i]+oua[i-1]);
 sol=maxim(sol,dinamic[n+2]);

 //////////////////// end ///////////////////////////////////////////
 fout<<sol<<'\n';
  fout.close();
return 0;
}     

inline long maxim(long v1,long v2)
{
 if(v1>v2)
  return v1;
 return v2;
}