输入一个数组,每个元素代表每个房子的价值,不能抢相邻的两个房子,求抢劫的最大值
和这道二叉树的树形dp是一个系列:
http://blog.youkuaiyun.com/AC_0_summer/article/details/52210957
也是维护两个dp,dp1[i]表示抢第i个房子,dp2[i]表示不抢第i个房子;
dp1[i]=dp2[i-1]+nums[i];dp2[i]=max(dp1[i-1],dp2[i-1])
class Solution {
public:
int rob(vector<int>& nums) {
int len=nums.size();
if(len==0) return 0;
if(len==1) return nums[0];
vector<int> dp1(len+1,0);
vector<int> dp2(len+1,0);
dp1[0]=nums[0];
for(int i=1;i<len;i++){
dp1[i]=dp2[i-1]+nums[i];
dp2[i]=max(dp1[i-1],dp2[i-1]);
}
return max(dp1[len-1],dp2[len-1]);
}
};