Cod sursa(job #2490870)

Utilizator andreiomd1Onut Andrei andreiomd1 Data 11 noiembrie 2019 11:00:46
Problema Oo Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("oo.in");
ofstream g("oo.out");

const int NMAX = 1e5 + 10;

int N, A[NMAX];

int dp[NMAX], ans;

static inline void Read ()
{
    f.tie(NULL);

    f >> N;

    for(int i = 1; i <= N; ++i)
        f >> A[i];

    return;
}

static inline void Solve1 ()
{
    dp[1] = A[1] + A[2];
    dp[2] = A[2] + A[3];

    for(int i = 3; i < N; ++i)
        dp[i] = max(dp[i - 3] + A[i] + A[i + 1], dp[i - 1]);

    ans = dp[N - 1];

    return;
}

static inline void Solve2 ()
{
    memset(dp, 0, sizeof(dp));

    dp[1] = A[N] + A[1];
    dp[2] = A[1] + A[2];

    for(int i = 3; i < N; ++i)
        if(i != (N - 1))
            dp[i] = max(dp[i - 3] + A[i] + A[i + 1], dp[i - 1]);
        else dp[i] = dp[i - 1];

    ans = max(ans, dp[N - 1]);

    return;
}

int main()
{
    Read();

    Solve1();
    Solve2();

    g << ans << '\n';

    return 0;
}