Cod sursa(job #1036651)

Utilizator darrenRares Buhai darren Data 19 noiembrie 2013 15:26:31
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.59 kb
#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();
}