Mai intai trebuie sa te autentifici.

Cod sursa(job #1035485)

Utilizator darrenRares Buhai darren 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();
}