213. House Robber II

class Solution {
public:
    int rob(vector<int>& nums) {
        if (nums.size() == 0)   return 0;
        if (nums.size() == 1)   return nums[0];
        return max(helper(nums, 0, nums.size()-2), helper(nums, 1, nums.size()-1));
    }
    int helper(vector<int>& nums, int start, int end) {
        vector<int> dp1(end+1, 0);  // choose
        dp1[start] = nums[start];
        vector<int> dp2(end+1, 0);  // not choose
        for (int i = start+1; i <= end; i++) {
            dp1[i] = dp2[i-1] + nums[i];        // choose it: not choose i-1
            dp2[i] = max(dp2[i-1], dp1[i-1]);   // not choose it: max(not choose i-1, choose i-1)
        }
        return max(dp1[end], dp2[end]);
    }
};

 

posted @ 2018-11-22 07:40  JTechRoad  阅读(88)  评论(0编辑  收藏  举报