Cod sursa(job #3233670)

Utilizator DennisJasonOgnean Dennis DennisJason Data 4 iunie 2024 12:56:41
Problema Oo Scor 80
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <bitset>
#include <cmath>
#include <algorithm>
#include <numeric>
#include <deque>
#include <fstream>
#include <iomanip>
#include <iostream>
#include <iterator>
#include <limits>
#include <list>
#include <map>
#include <unordered_map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define NMAX 200001
#define MAX 150001
#define pb push_back
#define MOD 1000000007
#define nl '\n'
#define INF 0x3f3f3f3
#define pii1 pair<int, pair<int,int>>  (1,(1,2));
//#define int long long
#define pii pair<int,int>
#define tpl tuple<int,int,int>
using namespace std;
ifstream fin("oo.in");
ofstream fout("oo.out");
int n,v[NMAX];
int dp[NMAX][4];
void go_from_1()
{
    dp[1][1]=v[1]+v[2];
    dp[2][1]=dp[1][1];
    dp[3][1]=0;
    for(int i=4;i<n;++i)
    {
        dp[i][1]=max(dp[i-1][1],dp[i-3][1]+v[i]+v[i+1]);
    }

}
void go_from_2()
{

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

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

}
signed main() {

    fin>>n;
    for(int i=1;i<=n;++i)
    {
        fin>>v[i];
    }
    go_from_1();
    go_from_2();
    go_from_3();
    int mx=0;
    for(int i=1;i<=n;++i)
    {
        mx=max({mx,dp[i][1],dp[i][2],dp[i][3]});
    }
    fout<<mx;



    return 0;
}