Cod sursa(job #1558059)

Utilizator borcanirobertBorcani Robert borcanirobert Data 28 decembrie 2015 17:36:34
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <fstream>
#include <iostream>
#include <cstring>
using namespace std;

ifstream fin("oo.in");
ofstream fout("oo.out");

const int MAX = 100005;
int a[MAX];
int D[MAX];
int N;
int max1, max2, max3;
int maxim;

void Read();
void Solve();

int main()
{
	Read();
	Solve();
	
	fin.close();
	fout.close();
	return 0;
}


void Read()
{
	int i;
	
	fin >> N;
	for ( i = 1; i <= N; i++ )
	{
		fin >> a[i];
		//cout << i << ' ' << a[i]; cin.get();
	}
}

void Solve()
{
	int i, j;
	
	maxim = 0;
	for ( i = 5; i < N; i++ )
	{
		D[i] = maxim + a[i] + a[i - 1];
		maxim = max( maxim, D[i - 3] );

		if ( D[i] > max1 ) max1 = D[i];
	}
	
	max1 += ( a[1] + a[2] );
	
	memset( D, 0, sizeof(D) );
	
	maxim = 0;
	for ( i = 4; i < N - 1; i++ )
	{
		D[i] = maxim + a[i] + a[i - 1];
		maxim = max( maxim, D[i - 3] );

		if ( D[i] > max2 ) max2 = D[i];
	}
	
	max2 += ( a[1] + a[N] );
	
	memset( D, 0, sizeof(D) );
	
	maxim = 0;
	for ( i = 6; i <= N; i++ )
	{
		D[i] = maxim + a[i] + a[i - 1];
		maxim = max( maxim, D[i - 3] );

		if ( D[i] > max3 ) max3 = D[i];
		
		//cout << D[i]; cin.get();
	}
	
	max3 += ( a[2] + a[3] );
	
	fout << max( max( max1, max2 ), max3 );
}