Cod sursa(job #2096906)

Utilizator circeanubogdanCirceanu Bogdan circeanubogdan Data 30 decembrie 2017 01:05:45
Problema Oo Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <fstream>
#define DIM 100002

using namespace std;

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

int n, dp[DIM], v[DIM], maxim;

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

int main()
{
    f>>n;
    for(int i = 1; i <= n; ++ i)
        f>>v[i];

    //1//////////////////////////////
    dp[1] = 0;
    dp[n] = 0;
    dp[2] = v[1] + v[2];
    dp[3] = dp[2];
    for(int i = 4; i <= n - 1; ++ i){
        dp[i] = max(dp[i - 1], max(dp[i - 2], max(dp[i - 3] + v[i - 1] + v[i], dp[i - 4] + v[i - 1] + v[i])));
    }
    maxim = max(dp[n - 1], max(dp[n - 2], max(dp[n - 3], dp[n - 4])));

    //2//////////////////////////////
    reset();
    dp[1] = v[n] + v[1];
    dp[n] = 0;
    dp[n - 1] = 0;
    dp[2] = dp[1];
    dp[3] = dp[1];

    for(int i = 4; i < n - 1; ++ i){
        dp[i] = max(dp[i - 1], max(dp[i - 2], max(dp[i - 3] + v[i - 1] + v[i], dp[i - 4] + v[i - 1] + v[i])));
    }
    maxim = max(maxim, max(dp[n - 1], max(dp[n - 2], max(dp[n - 3], dp[n - 4]))));

    //3//////////////////////////////
    reset();
    dp[n - 1] = 0;
    dp[n] = v[n - 1] + v[n];
    dp[1] = dp[n];
    dp[2] = dp[n];
    dp[3] = dp[1] + v[3];
    for(int i = 4; i <= n - 1; ++ i){
        dp[i] = max(dp[i - 1], max(dp[i - 2], max(dp[i - 3] + v[i - 1] + v[i], dp[i - 4] + v[i - 1] + v[i])));
    }
    maxim = max(maxim, max(dp[n - 1], max(dp[n - 2], max(dp[n - 3], dp[n - 4]))));

    g<<maxim;
    return 0;
}