Cod sursa(job #1720723)

Utilizator GabiTulbaGabi Tulba-Lecu GabiTulba Data 23 iunie 2016 12:39:15
Problema Oo Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>
#define MAX 6000000
#define INF 2000000005
using namespace std;
 
char f[MAX];
int pos=0,N,v[100005],Max=0,lenght=3;
struct circle
{
	int val,val2;
}dp[100005];
void r(int &nr)
{
	int sign=0;
    nr=0;
    while(f[pos]<'0'||f[pos]>'9')
    {
		if(f[pos]=='-')
			sign=1;
		pos++;
	}
    while(f[pos]>='0'&&f[pos]<='9')
        nr=nr*10+f[pos++]-'0';
	if(sign==1)
		nr=-nr;
}
int main()
{
    freopen("oo.in","r",stdin);
    freopen("oo.out","w",stdout);
	fread(f,1,MAX,stdin);
	r(N);
	for(int i=1;i<=N;i++)
		r(v[i]);
	dp[N-1].val=v[N]+v[N-1];
	dp[N-2].val=dp[N-2].val2=v[N-2]+v[N-1];
	for(int i=N-3;i>1;i--)
	{
		int M=0;
			for(int j=i+3;j<=i+6&&j<N;j++)
				if(dp[j].val>M)
					M=dp[j].val;
		dp[i].val=M+v[i]+v[i+1];
		if(dp[i].val>Max)
			Max=dp[i].val;
	}
	for(int i=N-3;i>0;i--)
	{
		int M=0;
			for(int j=i+3;j<=i+6&&j<N-1;j++)
				if(dp[j].val>M)
					M=dp[j].val2;
		dp[i].val2=M+v[i]+v[i+1];
		if(dp[i].val2>Max)
			Max=dp[i].val2;
	}
	printf("%d",Max);
	return 0;
}