当前位置: 首页 > article >正文

代码随想录算法训练营第四十四天| 动态规划07

198.打家劫舍

视频讲解:动态规划,偷不偷这个房间呢?| LeetCode:198.打家劫舍_哔哩哔哩_bilibili

代码随想录

确定递推公式很重要,在递推公式的提示下可以写出该题
dp[i]表示截至第i个房间偷到的最大金额

class Solution:
    def rob(self, nums: List[int]) -> int:
        if len(nums)==1:
            return nums[0]
        if len(nums)==1:
            return max(nums[0],nums[1])
        dp=[0]*(len(nums))
        dp[0]=nums[0]
        dp[1]=max(nums[0],nums[1])
        for i in range(2,len(nums)):
            dp[i]=max(dp[i-2]+nums[i],dp[i-1])
        return dp[len(nums)-1]

213.打家劫舍II

视频讲解:动态规划,房间连成环了那还偷不偷呢?| LeetCode:213.打家劫舍II_哔哩哔哩_bilibili

代码随想录

在上一题的基础上修改,考虑两种情况,去头或去尾,两种情况返回最大选项

class Solution:
    def rob(self, nums: List[int]) -> int:
        if len(nums)==1:
            return nums[0]
        def rob_sub(nums):
            if len(nums)==0:
                return 0
            if len(nums)==1:
                return nums[0]
            dp=[0]*(len(nums))
            dp[0]=nums[0]
            dp[1]=max(nums[0],nums[1])
            for i in range(2,len(nums)):
                dp[i]=max(dp[i-2]+nums[i],dp[i-1])
            return dp[len(nums)-1]
        case1=rob_sub(nums[:-1])
        case2=rob_sub(nums[1:])
        return max(case1,case2)

337.打家劫舍III

视频讲解:动态规划,房间连成树了,偷不偷呢?| LeetCode:337.打家劫舍3_哔哩哔哩_bilibili

代码随想录

dp数组(dp table)以及下标的含义:
1. 下标为 0 记录 **不偷该节点** 所得到的的最大金钱
2. 下标为 1 记录 **偷该节点** 所得到的的最大金钱

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:
    def rob(self, root: Optional[TreeNode]) -> int:
        def dfs(node):
            if not node:
                return (0,0)
            left=dfs(node.left)
            right=dfs(node.right)
            not_rob=max(left)+max(right)
            rob=node.val+left[0]+right[0]
            return (not_rob,rob)
        dp=dfs(root)
        return max(dp)

 


http://www.kler.cn/a/559777.html

相关文章:

  • 【深度学习】Adam和AdamW优化器有什么区别,以及为什么Adam会被自适应学习率影响
  • Netstat(Network Statistics)网络工具介绍
  • 《游戏人工智能编程 案例精粹》阅读心得
  • 【AI】面试高频考点-数据标注规则
  • blackbox.ai 一站式AI代理 畅享顶级模型
  • Qt学习 网络编程 TPC通信
  • 激光工控机在自动化生产线中有什么关键作用?
  • Pinia 3.0 正式发布:全面拥抱 Vue 3 生态,升级指南与实战教程
  • PyTorch v2.6 Overview
  • Win10配置VSCode的C/C++编译环境
  • 【PX4日志解析报错】pyulog工具解析日志出错
  • 一文讲解Redis中的混合持久化
  • 学术论文项目网站搭建教程【Github】
  • mysql的源码包安装
  • 【杂谈】-强化学习遇见链式思维:将大型语言模型转变为自主推理代理
  • Python 函数(传递任意数量的实参)
  • jmeter 与大数据生态圈中的服务进行集成
  • 软件工程和系统分析与设计
  • 算法随笔_58: 队列中可以看到的人数
  • leetcode - hot100 - python - 专题二:双指针