Cod sursa(job #1039685)

Utilizator japjappedulapPotra Vlad japjappedulap Data 23 noiembrie 2013 13:27:34
Problema Oo Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <fstream>
#include <cstring>
using namespace std;

ifstream is ("oo.in");
ofstream os ("oo.out");

int a[100001], dp[100001];
int n, res;


int main()
{
    is >> n;
    for (int i = 1; i <= n; ++i)
        is >> a[i];
    for (int i = 3; i <= n-1; ++i)
    {
        if (i < 3)   dp[i] = max(dp[i-1], a[i]+a[i-1]);
        else dp[i] = max(dp[i-1], dp[i-3]+a[i]+a[i-1]);
        res = max(dp[i], res);
    }
    os << res << '\n';
    memset(dp, 0, sizeof(dp));
    for (int i = 5; i <= n-1; ++i)
    {
        if (i < 3)   dp[i] = max(dp[i-1], a[i]+a[i-1]);
        else dp[i] = max(dp[i-1], dp[i-3]+a[i]+a[i-1]);
        res = max(dp[i]+a[1]+a[2], res);
    }
    os << res << '\n';
    memset(dp, 0, sizeof(dp));
    for (int i = 4; i <= n-2; ++i)
    {
        if (i < 3)   dp[i] = max(dp[i-1], a[i]+a[i-1]);
        else dp[i] = max(dp[i-1], dp[i-3]+a[i]+a[i-1]);
        res = max(dp[i]+a[1]+a[n], res);
    }
    os << res << '\n';
    memset(dp, 0, sizeof(dp));
    for (int i = 3; i <= n-3; ++i)
    {
        if (i < 3)   dp[i] = max(dp[i-1], a[i]+a[i-1]);
        else dp[i] = max(dp[i-1], dp[i-3]+a[i]+a[i-1]);
        res = max(dp[i]+a[n]+a[n-1], res);
    }
    os << res << '\n';
    is.close();
    os.close();
    return 0;
}