zoukankan      html  css  js  c++  java
  • 30 Day Challenge Day 12 | Leetcode 213. House Robber II

    题解

    Medium

    动态规划

    将环形数组分解两个数组去处理,即[0:n-2]和[1:n-1]。最后取结果的较大值。

    class Solution {
    public:
        int rob(vector<int>& nums) {
            if(nums.empty()) return 0;
            if(nums.size() == 1) return nums[0];
            if(nums.size() == 2) return max(nums[0], nums[1]);
            
            
            int n = nums.size();
            vector<int> dp1(n), dp2(n);
            dp1[0] = nums[0], dp1[1] = max(nums[0], nums[1]);
            dp2[1] = nums[1], dp2[2] = max(nums[1], nums[2]);
            for(int i = 2; i < n-1; i++) {
                dp1[i] = max(dp1[i-1], dp1[i-2] + nums[i]);
            }
            for(int i = 3; i < n; i++) {
                dp2[i] = max(dp2[i-1], dp2[i-2] + nums[i]);
            }
    
            return max(dp1[n-2], dp2[n-1]);
        }
    };
    
  • 相关阅读:
    2019.8.16
    一种抠环的办法
    [HAOI2015]树上染色
    有关树形背包
    2019.7.27
    有关矩阵快速幂
    2019.7.25
    欧拉函数(转载)
    2019.7.22
    phpstudy集成环境安装redis扩展
  • 原文地址:https://www.cnblogs.com/casperwin/p/13722248.html
Copyright © 2011-2022 走看看