Cod sursa(job #2986449)

Utilizator WindowsPhoneSerban Pirvulescu WindowsPhone Data 28 februarie 2023 17:18:01
Problema Oo Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.08 kb
#include <bits/stdc++.h>

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

int n, mx, v[100005];
int dp[100005], dp2[100005], dp3[100005];

int main() {
    fin >> n;
    
    for (int i=0;i<n;i++) {
        fin >> v[i];
    }
    
    for (int i=0;i<n;i++) {
        int c1 = dp[(i+n-3)%n] + v[(i+n-1)%n] + v[i];
        int c2 = dp[(i+n-4)%n] + v[(i+n-1)%n] + v[i];
        int c3 = dp[(i+n-5)%n] + v[(i+n-1)%n] + v[i];
        int d1 = dp2[(i+n-3)%n] + v[(i+n-1)%n] + v[i];
        int d2 = dp2[(i+n-4)%n] + v[(i+n-1)%n] + v[i];
        int d3 = dp2[(i+n-5)%n] + v[(i+n-1)%n] + v[i];
        int e1 = dp3[(i+n-3)%n] + v[(i+n-1)%n] + v[i];
        int e2 = dp3[(i+n-4)%n] + v[(i+n-1)%n] + v[i];
        int e3 = dp3[(i+n-5)%n] + v[(i+n-1)%n] + v[i];
        
        if (i >= 0 && i < n-2) dp[i] = max(max(c1, c2), c3);
        if (i >= 1 && i < n-1) dp2[i] = max(max(d1, d2), d3);
        if (i >= 2 && i < n) dp3[i] = max(max(e1, e2), e3);
        
        mx = max(mx, max(max(dp[i], dp2[i]), dp3[i]));
    }
    
    fout << mx;
    return 0;
}