Pagini recente » Cod sursa (job #2902074) | Cod sursa (job #1283819) | Cod sursa (job #2291007) | Cod sursa (job #1553978) | Cod sursa (job #1720720)
#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
{
bool firstoff;
int val;
}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].firstoff=true,dp[N-1].val=v[N]+v[N-1];
dp[N-2].val=v[N-2]+v[N-1];
for(int i=N-3;i>0;i--)
{
bool m=false;
int M=0;
if(i!=1)
{
for(int j=i+3;j<N;j++)
if(dp[j].val>M)
M=dp[j].val,m=dp[j].firstoff;
}
else
for(int j=i+3;j<N;j++)
if(dp[j].val>M&&dp[j].firstoff==false)
M=dp[j].val;
dp[i].val=M+v[i]+v[i+1],dp[i].firstoff=m;
if(dp[i].val>Max)
Max=dp[i].val;
}
printf("%d",Max);
return 0;
}