题目:
思路:
看出来了,是动态规划.!!!
我们以最后一家是偷还是不偷为分割点.
(1). 如果偷 那么前面一家那么就不能偷. 那么dp[n] = dp[n-2] + nums[n];
(2)如果不偷那么他就只能等于dp[i-1]
我们只需要在dp[n]的时候取以上两种情况的最大值即可.
代码是:
class Solution {
public:
int rob(vector<int>& nums) {
int n = nums.size()-1;
if(n==0) return nums[0];
int dp[1000]={0};
dp[0]=nums[0];
dp[1]=max(dp[0],nums[1]);
for(int i=2;i<nums.size();i++){
dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
}
return dp[n];
}
};