Pagini recente » Cod sursa (job #2367708) | Cod sursa (job #2540024) | Cod sursa (job #3038839) | Cod sursa (job #926921) | Cod sursa (job #992797)
Cod sursa(job #992797)
#include <fstream>
using namespace std;
ifstream f("oo.in");
ofstream g("oo.out");
int n;
long long v[100011],a[100011],sol;
inline long long maxim(long long c,long long b){
return (c>b?c:b);
}
int main(void){
register int i,j;
f>>n;
for(i=1;i<=n;i++)
f>>a[i];
//I:Luam oo din primele doua sectoare
v[1]=0;
v[2]=a[1]+a[2];
v[3]=v[4]=v[2];
for(i=5;i<n;i++)
v[i]=maxim(v[i-1],v[i-3]+a[i-1]+a[i]);
sol=v[n-1];
//II:Nu luam oo din primul sector
v[2]=0,v[3]=a[2]+a[3];
v[4]=maxim(v[3],a[3]+a[4]);
for(i=5;i<=n;i++)
v[i]=maxim(v[i-1],v[i-3]+a[i]+a[i-1]);
sol=maxim(sol,v[n]);
//III:Luam din primul si ultimul sector
//deplasarea
a[n+1]=a[1];
for(i=1;i<=n;i++)
a[i]=a[i+1];
v[1]=0,v[2]=0,v[3]=a[1]+a[2];
v[4]=maxim(a[2]+a[3],a[3]+a[4]);
for(i=5;i<=n;i++)
v[i]=maxim(v[i-1],v[i-3]+a[i]+a[i-1]);
sol=maxim(sol,v[n]);
g<<sol;
f.close();
g.close();
return 0;
}