代码随想录算法训练营第34天 | 第九章动态规划 part07

文章目录

      • 第九章 动态规划 Part 07
        • 198. 打家劫舍
        • 213. 打家劫舍 II
        • 337. 打家劫舍 III

第九章 动态规划 Part 07

今天是打家劫舍的一天,这个系列题目不算难,大家可以一口气拿下。

198. 打家劫舍

视频讲解:https://www.bilibili.com/video/BV1Te411N7SX
题解链接:https://programmercarl.com/0198.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8D.html
看了下感觉确实不难,最开始我还在想加一句:if(dp[j-1]==dp[j-2])判断下
前一个是否已经被打劫了,但是实际上,无论前一个是否被打劫了 dp[j] = max(dp[j- 2] + nums[j-1], dp[j - 1]);都成立的。具体大家可以自己分情况思考。

class Solution {
   
public:
    int rob(vector<int>& nums) {
   
        vector<int> dp(nums.size()+1,0);
        dp[1] = nums[0];
       
        for(int j=2;j<=nums.size();j++)
        {
   
           
           dp[j] = max(dp[j- 2] + nums[j-1], dp[j - 1]);//
        }
        return dp[nums.size()];
    }
};
213. 打家劫舍 II

视频讲解:https://www.bilibili.com/video/BV1oM411B7xq
题解链接:https://programmercarl.com/0213.%E6%89%93%E5%AE%B6%E5%8A%AB%E8%88%8DII.html
代码随想录给出了三种可能,实际上只有两种可能,因为很简单,既然首位相连,所以相当于第一家和最后一家,只能抢劫一家。至于所谓的只考虑中间的,太傻了,多了两个机会肯定比只考虑中间的抢的钱更多。
情况:考虑包含尾元素,不包含首元素
代码随想录算法训练营第34天 | 第九章动态规划 part07_第1张图片
考虑包含首元素,不包含尾元素
代码随想录算法训练营第34天 | 第九章动态规划 part07_第2张图片

class Solution {
   
public:
    int rob1(vector<

你可能感兴趣的:(C++学习,算法,动态规划)