leetcode-House Robber-198(dp)

输入一个数组,每个元素代表每个房子的价值,不能抢相邻的两个房子,求抢劫的最大值
和这道二叉树的树形dp是一个系列:
http://blog.csdn.net/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;i1]+nums[i];
            dp2[i]=max(dp1[i-1],dp2[i-1]);
        }
        return max(dp1[len-1],dp2[len-1]);
    }
};

你可能感兴趣的:(leetcode)