LeetCode 198. House Robber(必须不连续数组的最大和)

DP,dp[i] = max(dp[i – 2] + nums[i], dp[i – 1])

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