Pagini recente » Cod sursa (job #899319) | Cod sursa (job #899156) | Cod sursa (job #2565697) | Monitorul de evaluare | Cod sursa (job #3340282)
#include <bits/stdc++.h>
using namespace std;
int max_oua(int N, vector<int>& a) {
if (N == 2) return a[0] + a[1]; // doar o pereche
auto dp_line = [&](int start, int end) {
int dp_prev2 = 0, dp_prev1 = 0;
for (int i = start; i < end; i++) {
int pair_sum = a[i] + a[(i+1)%N];
int dp_curr = max(dp_prev1, dp_prev2 + pair_sum);
dp_prev2 = dp_prev1;
dp_prev1 = dp_curr;
}
return dp_prev1;
};
int case1 = dp_line(0, N-1); // ignorăm ultima pereche (N,1)
int case2 = dp_line(1, N); // ignorăm prima pereche (1,2)
return max(case1, case2);
}
int main() {
// folosim fișierele de input/output
freopen("oo.in", "r", stdin);
freopen("oo.out", "w", stdout);
int N;
cin >> N;
vector<int> a(N);
for (int i = 0; i < N; i++) cin >> a[i];
int rezultat = max_oua(N, a);
cout << rezultat << "\n";
return 0;
}