分类讨论 环形结构
#include <iostream> using namespace std; const int N = 2 * 100010; int a[N], dp[N]; int main() { int n; cin >> n; for(int i = 0; i < n; i ++) cin >> a[i]; dp[0] = a[0], dp[1] = a[1], dp[2] = a[2]; // 不包含第一家 从第二家到最后一家 for(int i = 3; i < n; i ++){ dp[i] = max(dp[i - 2] + a[i], dp[i - 1]); } int res = dp[n - 1]; // 包含第一家 不包含最后一家 从第一家到倒数第二家 for(int i = 2; i < n - 1; i ++){ dp[i] = max(dp[i - 2] + a[i], dp[i - 1]); } res = max(res, dp[n - 2]); cout << res << endl; }