Pagini recente » Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #1036651)
#include <cstring>
#include <fstream>
#include <algorithm>
using namespace std;
int N;
int A[100002];
int D[100002];
int result;
int main()
{
ifstream fin("oo.in");
ofstream fout("oo.out");
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> A[i];
// iau perechea (1, 2)
memset(D, 0, sizeof(D));
for (int i = 5; i <= N - 1; ++i)
{
if (i - 3 < 0)
D[i] = max(D[i - 1], A[i] + A[i - 1]);
else
D[i] = max(D[i - 1], D[i - 3] + A[i] + A[i - 1]);
result = max(result, D[i] + A[1] + A[2]);
}
// iau perechea (N, 1)
memset(D, 0, sizeof(D));
for (int i = 4; i <= N - 2; ++i)
{
if (i - 3 < 0)
D[i] = max(D[i - 1], A[i] + A[i - 1]);
else
D[i] = max(D[i - 1], D[i - 3] + A[i] + A[i - 1]);
result = max(result, D[i] + A[N] + A[1]);
}
// iau perechea (N - 1, N)
memset(D, 0, sizeof(D));
for (int i = 3; i <= N - 3; ++i)
{
if (i - 3 < 0)
D[i] = max(D[i - 1], A[i] + A[i - 1]);
else
D[i] = max(D[i - 1], D[i - 3] + A[i] + A[i - 1]);
result = max(result, D[i] + A[N - 1] + A[N]);
}
// nu iau nicio pereche speciala
memset(D, 0, sizeof(D));
for (int i = 2; i <= N - 1; ++i)
{
if (i - 3 < 0)
D[i] = max(D[i - 1], A[i] + A[i - 1]);
else
D[i] = max(D[i - 1], D[i - 3] + A[i] + A[i - 1]);
result = max(result, D[i]);
}
fout << result << '\n';
fin.close();
fout.close();
}