leecode213.打家劫舍||
普通的198.打家劫舍是一个普通数组,这里的题目是成环了,相当于如果偷了房间0那么最后一个不能偷,如果偷了最后一个,那么房间0不能偷;
所以分成两种情况来进行动态规划,两种情况取最大值就行,第一种是不包含最后一个房间的偷取情况,第二种是不包含第一个房间的偷取情况
class Solution {
private:
int rob(vector<int>& nums,int begin,int end){
if(end-begin==0)
return nums[begin];
vector<int> dp(nums.size(),0);
dp[begin]=nums[begin];
dp[begin+1]=max(nums[begin],nums[begin+1]);
for(int i=begin+2;i<=end;i++)
dp[i]=max(dp[i-2]+nums[i],dp[i-1]);
return dp[end];
}
public:
int rob(vector<int>& nums) {
if(nums.size()==1)
return nums[0];
int result1=rob(nums,0,nums.size()-1-1);
int result12=rob(nums,1,nums.size()-1);
return max(result1,result12);
}
};