dp[i]
表示前i+1
个房子所得最大值
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
int size = nums.size();
if(size==1) return nums[0];
vector<int> dp1(size);
vector<int> dp2(size);
dp1[0]=nums[0];//偷第0个房子
dp1[1]=nums[0];
dp2[0]=0;//偷第1个房子
dp2[1]=nums[1];
//0~n-2
for(int i=2;i<size-1;++i) dp1[i]=max(dp1[i-2]+nums[i],dp1[i-1]);
//1~n-1
for(int i=2;i<size;++i) dp2[i]=max(dp2[i-2]+nums[i],dp2[i-1]);
return max(dp1[size-2],dp2[size-1]);
}