Cod sursa(job #1558071)

Utilizator borcanirobertBorcani Robert borcanirobert Data 28 decembrie 2015 17:47:14
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 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 = 3; i <= N; i++ )
	{
		if ( i > 3 )
			maxim = max( maxim, D[i - 3] );
		D[i] = maxim + a[i] + a[i - 1];

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

		if ( D[i] > max2 ) max2 = D[i];
		
		//cout << D[i]; cin.get();
	}
	
	memset(D, 0, sizeof(D));
	maxim = 0;
	D[1] = a[1] + a[N];
	for ( i = 2; i < N - 1; i++ )
	{
		if ( i > 3 )
			maxim = max( maxim, D[i - 3] );
		D[i] = maxim + a[i] + a[i - 1];

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