首页 > 编程语言 >「代码随想录算法训练营」第三十四天 | 动态规划 part7

「代码随想录算法训练营」第三十四天 | 动态规划 part7

时间:2024-08-10 09:27:39浏览次数:13  
标签:right return nums int 随想录 第三十四 part7 dp left

198. 打家劫舍

题目链接:https://leetcode.cn/problems/house-robber/
文章讲解:https://programmercarl.com/0198.打家劫舍.html
题目难度:中等
视频讲解:https://www.bilibili.com/video/BV1Te411N7SX
题目状态:有点思路但不全。

思路:

这次的dp[i]数组表示在到第i个房间中时最多的偷盗金额,而到第i个房间的时候,我们有两个策略,①偷这一家;②不偷这一家。

① 偷这一家,那么我们就不能偷前一家了(i-1),因此此时的金额数量为dp[i - 2] + nums[i];
② 不偷这一家,那么我们就按照之前的策略了,也就是dp[i - 1]的金额。

因此我们的递归dp公式就出来了:dp[i] = max(dp[i - 2] + nums[i], dp[i - 1]);

所以我们要初始化两个数,

  • dp[0] = 0
  • dp[1] = max(nums[0], nums[1])

代码:

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

213. 打家劫舍 II

题目链接:https://leetcode.cn/problems/house-robber-ii/
文章讲解:https://programmercarl.com/0213.打家劫舍II.html
题目难度:中等
视频讲解:https://www.bilibili.com/video/BV1oM411B7xq
题目状态:

标签:right,return,nums,int,随想录,第三十四,part7,dp,left
From: https://www.cnblogs.com/frontpen/p/18351952

相关文章

  • 代码随想录Day10
    232.用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的元素booleanempty()如果队列为......
  • 代码随想录算法训练营day08|344.反转字符串,541.反转字符串II,卡码网:54.替换数字
    344.反转字符串题目链接:https://leetcode.cn/problems/reverse-string/description/我的代码:classSolution{public:voidreverseString(vector<char>&s){for(inti=0;i<s.size()/2;i++){chartemp=s[i];s[i]=......
  • 代码随想录day24 || 93 复原IP地址,78 子集, 90 子集2
    93复原ip地址funcrestoreIpAddresses(sstring)[]string{ //字符串分割问题,考虑回溯算法 varpath,res[]string iflen(s)<4{ returnres } backtracking(s,&path,&res) returnres}funcbacktracking(sstring,path*[]string,res*[]string){ ifle......
  • 代码随想录Day9
    KMP算法主要用来进行字符串匹配KMP的主要思想是当出现字符串不匹配时,可以知道一部分之前已经匹配的文本内容,可以利用这些信息避免从头再去做匹配了。所以如何记录已经匹配的文本内容,是KMP的重点,也是next数组肩负的重任。next数组就是一个前缀表(prefixtable)。前缀表有什么作......
  • 「代码随想录算法训练营」第三十三天 | 动态规划 part6
    322.零钱兑换题目链接:https://leetcode.cn/problems/coin-change/文章讲解:https://programmercarl.com/0322.零钱兑换.html题目难度:中等视频讲解:https://www.bilibili.com/video/BV14K411R7yv/题目状态:略微有点思路,但还是有点转不过来。思路:这次是找最小的钱币组合,因此......
  • 代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形
    代码随想录算法刷题训练营day49:LeetCode(42)接雨水、LeetCode(84)柱状图中最大的矩形LeetCode(42)接雨水题目代码importjava.util.Stack;classSolution{publicinttrap(int[]height){//用单调栈进行操作intsum=0;Stack<Integ......
  • 代码随想录算法训练营第64天 | 图论:Floyd 算法+A * 算法
    97.小明逛公园https://kamacoder.com/problempage.php?pid=1155Floyd算法精讲https://www.programmercarl.com/kamacoder/0097.小明逛公园.html#floyd-算法精讲Floyd算法精讲问题总结:双向道路;路径规划;多个起点到多个终点核心思想:动态规划确定dp数组和下标含义:grid......
  • 代码随想录day23 || 39 组合总和,40 组合总和2,131 分割回文串
    39组合总和funccombinationSum(candidates[]int,targetint)[][]int{ //思路,组合问题考虑回溯算法,考虑到元素可能重复问题,所以,树的最大深度应该是target/min(candudates)+1 varpath=[]int{} varres=[][]int{} backtracking(target,candidates,&path,&res......
  • 代码随想录算法训练营第63天 | SPFA算法优化+变式
    94.城市间货物运输Ihttps://kamacoder.com/problempage.php?pid=1152Bellman_ford队列优化算法(又名SPFA)https://www.programmercarl.com/kamacoder/0094.城市间货物运输I-SPFA.html95.城市间货物运输IIhttps://kamacoder.com/problempage.php?pid=1153bellman_ford之判......
  • 「代码随想录算法训练营」第三十二天 | 动态规划 part5
    52.携带研究材料题目链接:https://kamacoder.com/problempage.php?pid=1052文章讲解:https://programmercarl.com/背包问题理论基础完全背包.html视频讲解:https://www.bilibili.com/video/BV1uK411o7c9/题目状态:看题解过思路:在0-1背包问题中,每个物品只能选择一次,即每个物品......