Pagini recente » Cod sursa (job #2951686) | Cod sursa (job #2352122) | Cod sursa (job #45855) | Cod sursa (job #2438119) | Cod sursa (job #3147859)
#include <fstream>
using namespace std;
ifstream cin("oo.in");
ofstream cout("oo.out");
const int NMAX = 1e5;
int n;
int a[NMAX + 1];
int dp[NMAX + 1][2];
int ans;
void Reset()
{
for (int i = 1; i <= n; i++)
dp[i][0] = dp[i][1] = 0;
}
int main()
{
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
// [1, n - 1]
for (int i = 2; i <= n - 1; i++)
{
dp[i][0] = max(dp[i - 1][1], dp[i - 1][0]);
dp[i][1] = dp[i - 2][0] + a[i] + a[i - 1];
}
ans = max(dp[n][0], dp[n][1]);
Reset();
// [2, n]
for (int i = 3; i <= n; i++)
{
dp[i][0] = max(dp[i - 1][1], dp[i - 1][0]);
dp[i][1] = dp[i - 2][0] + a[i] + a[i - 1];
}
ans = max(ans, max(dp[n][0], dp[n][1]));
Reset();
// [3, n - 2]
for (int i = 4; i <= n - 2; i++)
{
dp[i][0] = max(dp[i - 1][1], dp[i - 1][0]);
dp[i][1] = dp[i - 2][0] + a[i] + a[i - 1];
}
ans = max(ans, max(dp[n][0], dp[n][1]));
cout << ans;
return 0;
}