Given a list of non-negative integers representing the amount of money of each house, determine the maximum amount of money you can rob tonight without alerting the police.
tags: dp/动态规划
比如:
nums: 3 1 5 2 0 7 4
dp : 3 3 ?
求dp[2]:由于dp[1]=dp[0] ,说明在求dp[1]时没有用到nums[1],所以,不论nums[2]多大,直接加上dp[1]或dp[0] ,dp[2] = dp[1] + nums[2]。
nums : 3 1 5 2 0 7 4
dp : 3 3 8 ?
求dp[3]:由于dp[2]>dp[1] ,说明在求dp[2]时用到了nums[2],因为nums[3]不能和nums[2]同时出现,所以要判断dp[1]+nums[3]和dp[2]的大小。dp[3] = max(dp[1]+nums[3],dp[2])
class Solution {
public:
int rob(vector<int>& nums) {
int size = nums.size();
if(size == 0) return 0;
if(size == 1) return nums[0];
vector<int> dp(size,0);
dp[0] = nums[0];
dp[1] = nums[0]>nums[1]?nums[0]:nums[1];
for(int i = 2; i < size; ++i){
if(dp[i-2]==dp[i-1])
dp[i] = dp[i-1] + nums[i];
else
dp[i] = max(dp[i-2]+nums[i], dp[i-1]);
}
return dp[size-1];
}
};