题解 | #打家劫舍(二)#
打家劫舍(二)
https://www.nowcoder.com/practice/6a8b2ceb3f8f4e5891939d7d7cbbd2c4
分类讨论 环形结构
#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; }