Cod sursa(job #871228)

Utilizator antonioteoZait Teodor Antonio antonioteo Data 4 februarie 2013 16:58:13
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.72 kb
#include <fstream>
#include <cstring>
#define maxim(a, b) ((a > b) ? a : b)
using namespace std;
const char iname[] = "oo.in";
const char oname[] = "oo.out";
ifstream fin(iname);
ofstream fout(oname);
int N, i, j, ANS;
int v[ 100004 ];
int dp[ 100004 ];
int DP(int in, int sf)
{
	int ans = 0;
	for (i = in; i <= sf; ++i)
	{
		for (j = 3; j <= 5; ++j)
			if (i > j) dp[i] = maxim(dp[i], dp[i-j]);
		dp[i] += (v[i] + v[i-1]);
		ans = maxim(ans, dp[i]);
	}
	if (in == 4 && sf == N-2)
		ans += (v[1] + v[N]);
	memset(dp,0,sizeof(dp));
	return ans;
}
int main()
{
    fin >> N;
    for (i = 1; i <= N; ++i) fin >> v[i];
	ANS = maxim(DP(2, N-1), maxim(DP(4, N-2),DP(3, N)));
	fout << ANS << '\n';
    return 0;
}