Cod sursa(job #2069743)

Utilizator RazorBestPricop Razvan Marius RazorBest Data 18 noiembrie 2017 19:39:30
Problema Oo Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include <fstream>
using namespace std;

FILE *f, *g;
int n, x, a[3][4], v[100001];

int main()
{
    f = freopen("oo.in", "r", stdin);
    g = freopen("oo.out", "w", stdout);

    scanf("%d", &n);

    for (int i = 1; i <= n; i++)
        scanf("%d", &v[i]);

    if (n < 6)
    {
        int mx = -1;
        for (int i = 1; i <= n; i++)
            mx = max(mx, v[i] + v[i % n  + 1]);
        printf("%d", mx);
        return 0;
    }

    a[0][0] = a[0][1] = v[n] + v[n - 1]; a[0][2] = v[2] + v[3] + a[0][0];
    a[1][0] = a[1][1] = a[1][2] = v[n] + v[1];
    a[2][0] = 0; a[2][1] = a[2][2] = v[1] + v[2];

    for (int i = 4; i < n - 2; i++)
    {
        for (int j = 0; j < 3; j++)
            a[j][3] = max(a[j][2], v[i] + v[i - 1] + a[j][0]);
        for (int j = 0; j < 3; j++)
            for (int k = 0; k < 3; k++)
                a[j][k] = a[j][k + 1];
    }
    a[1][3] = max(a[1][2], v[n - 2] + v[n - 3] + a[1][0]);
    a[2][3] = max(a[2][2], v[n - 2] + v[n - 3] + a[2][0]);
    for (int k = 0; k < 3; k++)
        a[2][k] = a[2][k + 1];
    a[2][3] = max(a[2][2], v[n - 1] + v[n - 2] + a[2][0]);

    int mx = -1;
    for (int j = 0; j < 3; j++)
        for (int k = 0; k < 4; k++)
            mx = max(mx, a[j][k]);

    printf("%d", mx);//max(max(a[0][3], a[1][3]), a[2][3]));
}