LEETCODE 198. House Robber

class Solution {
public:
    int rob(vector<int>& nums) {
        int len = nums.size();
        if(!len) return 0;
        if(len == 1) return nums[0];
        std::vector<int> mem(len,0);
        mem[0] = nums[0];
        mem[1] = nums[1] > nums[0] ? nums[1] : nums[0];
        for(int i = 2;i < len; ++i){
            mem[i] = max(mem[i-1],mem[i-2]+nums[i]);
        }
        return mem[len-1];
    }
};

这道题是典型的动态规划题,用空间换时间,将问题分解为小问题解决,每一次选择抢还是不抢取决于前一次和这次加上上上次的大小,如果抢了收益大,就抢。

posted on 2019-04-18 14:52  庭中核桃树  阅读(103)  评论(0编辑  收藏  举报

导航