跟leetcode面试题17.16. 按摩师(简单)
https://blog.csdn.net/zhangjiaji111/article/details/124330191
几乎一样的思路
dp
dp[i]表示前i所能偷盗的最大金额
dp[i]=max(dp[i-2]+nums[i],dp[i-1])
边界:dp[0]=nums[0]
max(nums[0], nums[1]);
class Solution {
public:
int rob(vector<int>& v) {
int n = v.size();
if (n == 1) return v[0];
if (n == 2) return max(v[0], v[1]);
int a = v[0], b = max(v[0], v[1]);
for (int i = 2; i < n; ++i) {
int c = max(a + v[i], b);
a = b;
b = c;
}
return b;
}
};
易错点:b为v[0]和v[1]的较大值。