Pagini recente » Cod sursa (job #1648058) | Cod sursa (job #821930) | Cod sursa (job #1744432) | Cod sursa (job #2552224) | Cod sursa (job #999529)
Cod sursa(job #999529)
#include <fstream>
#define In "oo.in"
#define Out "oo.out"
#define Nmax 100005
/**
avem 3 cazuri :
1.luam elementele de pe pozitiile 1 si 2
2.luam elementele de pe pozitiile 2 si 3
3.luam elementele de pe pozitiile 3 si 4
*/
using namespace std;
int dp[4][Nmax],a[Nmax];
int n;
inline void Read()
{
ifstream f(In);
f>>n;
int i;
for(i = 1;i <= n; ++i)
f>>a[i];
f.close();
}
inline void Solve()
{
int i;
dp[0][2] = a[1] + a[2];
dp[1][3] = a[2] + a[3];
dp[2][4] = a[3] + a[4];
for(i = 3;i < n; ++i)
dp[0][i] = max(dp[0][i-1],dp[0][i-3] + a[i-1] + a[i]);
dp[0][n] = dp[0][n-1];
for(i = 4;i <= n; ++i)
dp[1][i] = max(dp[1][i-1],dp[1][i-3] + a[i-1] + a[i]);
a[n+1] = a[1];
for(i = 5;i <= n+1; ++i)
dp[2][i] = max(dp[2][i-1],dp[2][i-3] + a[i-1] + a[i]);
dp[2][n] = dp[2][n+1];
}
inline void Write()
{
ofstream g(Out);
g<<max(max(dp[0][n],dp[1][n]),dp[2][n])<<"\n";
g.close();
}
int main()
{
Read();
Solve();
Write();
return 0;
}