动态规划,小偷有两种选择:
1.偷最后一个房子,则倒数第二个房子不能再偷
2.不偷最后一个房子
所以问题可以简化为r[i]=max{r[i-1],r[i-2]+i}
class Solution {
public:
int rob(vector
& nums) {
int n = nums.size();
if (n == 0)
return 0;
else if (n == 1)
return nums[0];
else if (n == 2)
return max(nums[0], nums[1]);
else
{
int*sum = new int[n];
sum[0] = nums[0];
sum[1] = max(nums[0], nums[1]);
for (int i = 2; i < n; i++)
sum[i] = max(sum[i - 1], sum[i - 2] + nums[i]);
return sum[n - 1];
}
}
};