Cod sursa(job #2282070)

Utilizator RaresLiscanLiscan Rares RaresLiscan Data 13 noiembrie 2018 09:48:14
Problema Oo Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin ("oo.in");
ofstream fout ("oo.out");

unsigned long long v[100005];
unsigned long long profit[100005];

void resetare(int n)
{
    for (int i = 1; i <= n; i ++) profit[i] = 0;
}

int main()
{
    int n;
    fin >> n;
    for (int i = 1; i <= n; i ++) fin >> v[i];
    unsigned long long maxim = 0;
    if (n == 2) maxim = v[1] + v[2];
    profit[1] = v[1] + v[n];
    for (int i = 2; i < n - 1; i ++) {
        if (i <= 3) profit[i] = max(profit[i - 1], v[i - 1] + v[i]);
        else profit[i] = max(profit[i - 1], v[i - 1] + v[i] + profit[i - 3]);
        if (profit[i] > maxim) maxim = profit[i];
    }
    resetare(n);
    for (int i = 2; i < n; i ++) {
        if (i <= 4) profit[i] = max(profit[i - 1], v[i - 1] + v[i]);
        else profit[i] = max(profit[i - 1], v[i - 1] + v[i] + profit[i - 3]);
        if (profit[i] > maxim) maxim = profit[i];
    }
    resetare(n);
    for (int i = 3; i <= n; i ++) {
        if (i <= 5) profit[i] = max(profit[i - 1], v[i - 1] + v[i]);
        else profit[i] = max(profit[i - 1], v[i - 1] + v[i] + profit[i - 3]);
        if (profit[i] > maxim) maxim = profit[i];
    }
    fout << maxim;
    return 0;
}