Pagini recente » Cod sursa (job #1763747) | Cod sursa (job #974390) | Cod sursa (job #3249721) | Cod sursa (job #1213817) | Cod sursa (job #3273781)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
long long compute_max(const vector<int>& p) {
int m = p.size();
if (m == 0) return 0;
if (m == 1) return p[0];
if (m == 2) return max((long long)p[0], (long long)p[1]); // Conversie explicită
long long dp0 = p[0];
long long dp1 = max((long long)p[0], (long long)p[1]); // Conversie explicită
long long dp2 = max(dp1, (long long)p[2]); // Conversie explicită
if (m == 3) return dp2;
for (int i = 3; i < m; ++i) {
long long current = max(dp2, (long long)p[i] + dp0); // Conversie explicită
dp0 = dp1;
dp1 = dp2;
dp2 = current;
}
return dp2;
}
int main() {
ifstream fin("oo.in");
ofstream fout("oo.out");
int N;
fin >> N;
vector<int> a(N);
for (int i = 0; i < N; ++i) {
fin >> a[i];
}
vector<int> p(N);
for (int i = 0; i < N; ++i) {
p[i] = a[i] + a[(i+1) % N];
}
vector<int> case1_p(p.begin(), p.end() - 1);
vector<int> case2_p(p.begin() + 1, p.end());
long long max_case1 = compute_max(case1_p);
long long max_case2 = compute_max(case2_p);
fout << max(max_case1, max_case2) << endl;
return 0;
}