#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: Compile Error ****************************************************************/