动态规划
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
int size = nums.size();
if(size==1) return nums[0];
vector<int> dp(size);
dp[0]=nums[0];
dp[1]=max(nums[0],nums[1]);
for(int i=2;i<size;++i)
dp[i]=max(dp[i-1],dp[i-2]+nums[i]);
return dp[size-1];
}
这种貌似省点内存
int rob(vector<int>& nums) {
if(nums.empty()) return 0;
int size = nums.size();
if(size==1) return nums[0];
int dp1=nums[0],dp2=max(nums[0],nums[1]),dp3;
for(int i=2;i<size;++i){
dp3=max(dp1+nums[i],dp2);
dp1=dp2;
dp2=dp3;
}
return dp2;
}