Cod sursa(job #464253)

Utilizator darrenRares Buhai darren Data 19 iunie 2010 15:00:40
Problema Oo Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.93 kb
#include<fstream>
#include<algorithm>
using namespace std;

int n, a[100016], mn[3][3][100016], mx;
int main()
{
	ifstream fin("oo.in");
	ofstream fout("oo.out");
	fin >> n;
	for (int i = 1; i <= n; ++i)
		fin >> a[i];
	a[0] = a[n];
	a[n + 1] = a[0];
	
	for (int k = 0; k < 3; ++k)
	{
		int p1, p2;
		switch (k)
		{
		case 0: // putem alege 1, 2 => nu putem alege n - 1, n
			p1 = 1;
			p2 = n - 2;
			break;
		case 1: // nu putem alege 1, 2 => putem alege n - 1, n
			p1 = 2;
			p2 = n - 1;
			break;
		case 3: // putem alege n, 1 => nu putem alege n - 2, n - 1 | 2, 3
			p1 = 3;
			p2 = n;
			break;
		}
		for (int i = p1; i <= p2; ++i)
		{
			mn[k][0][i] = max(mn[k][0][i - 1], mn[k][2][i - 1]); 
			mn[k][1][i] = mn[k][0][i - 1] + a[i] + a[i + 1];
			mn[k][2][i] = mn[k][1][i - 1];
			
			mx = max(mx, mn[k][0][i]);
			mx = max(mx, mn[k][1][i]);
			mx = max(mx, mn[k][2][i]);
		}
	}
	
	fout << mx;
}