Cod sursa(job #2282044)

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

using namespace std;

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

int v[100005], 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];
    int maxim = 0;
    for (int i = 1; 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[n - 2] > maxim) maxim = profit[n - 2];
    resetare(n);
    for (int i = 2; i < n; 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[n - 1] > maxim) maxim = profit[n - 1];
    resetare(n);
    for (int i = 3; i <= n; 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[n] > maxim) maxim = profit[n];
    fout << maxim;
    return 0;
}