#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 55;
int num[MAXN]; // 存储输入的数字序列
int dp[MAXN]; // 动态规划数组,dp[i]表示考虑前i个数时的最大和
int main() {
int n;
cin >> n;
for (int i = 0; i < n; ++i) {
cin >> num[i];
}
dp[0] = num[0]; // 初始化,只有一个数时最大和就是这个数本身
if (n >= 2) {
dp[1] = max(num[0], num[1]); // 有两个数时,取较大的那个数作为最大和
}
for (int i = 2; i < n; ++i) {
dp[i] = max(dp[i - 1], dp[i - 2] + num[i]); // 状态转移方程,取两种情况的较大值
}
cout << dp[n - 1] << endl; // 输出最终的最大和,注意数组下标从0开始,所以是dp[n - 1]
return 0;
}
/**************************************************************
Problem: 1653
User: zhuangsongyu
Language: C++
Result: Accepted
Time:22 ms
Memory:2072 kb
****************************************************************/