Mai intai trebuie sa te autentifici.
Cod sursa(job #1035485)
Utilizator | Data | 18 noiembrie 2013 16:56:34 | |
---|---|---|---|
Problema | Oo | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 1.4 kb |
#include <cstring>
#include <fstream>
#include <algorithm>
using namespace std;
int N, A[100002];
int D[100002], result;
int main()
{
ifstream fin("oo.in");
ofstream fout("oo.out");
fin >> N;
for (int i = 1; i <= N; ++i)
fin >> A[i];
// iau [N - 1, N]
for (int i = 3; i <= N - 3; ++i)
{
D[i] = D[i - 1];
if (i >= 2)
{
if (i - 3 >= 0) D[i] = max(D[i], D[i - 3] + A[i] + A[i - 1]);
else D[i] = max(D[i], A[i] + A[i - 1]);
}
result = max(result, D[i] + A[N - 1] + A[N]);
}
// iau [N, 1]
memset(D, 0, sizeof(D));
for (int i = 4; i <= N - 2; ++i)
{
D[i] = D[i - 1];
if (i >= 2)
{
if (i - 3 >= 0) D[i] = max(D[i], D[i - 3] + A[i] + A[i - 1]);
else D[i] = max(D[i], A[i] + A[i - 1]);
}
result = max(result, D[i] + A[N] + A[1]);
}
// nu iau nici [N - 1, N], nici [N, 1]
memset(D, 0, sizeof(D));
for (int i = 1; i <= N - 1; ++i)
{
D[i] = D[i - 1];
if (i >= 2)
{
if (i - 3 >= 0) D[i] = max(D[i], D[i - 3] + A[i] + A[i - 1]);
else D[i] = max(D[i], A[i] + A[i - 1]);
}
result = max(result, D[i]);
}
fout << result << '\n';
fin.close();
fout.close();
}