LeetCode-1463. 摘樱桃 II【数组 动态规划 矩阵】

embedded/2024/9/24 11:24:32/

LeetCode-1463. 摘樱桃 II【数组 动态规划 矩阵】

  • 题目描述:
  • 解题思路一:动态规划一般有自顶向下和自底向上两种编写方式,其中自顶向下也被称为「记忆化搜索」。
  • 解题思路二:0
  • 解题思路三:0

题目描述:

给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地。 grid 中每个格子的数字表示你能获得的樱桃数目。

你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。

请你按照如下规则,返回两个机器人能收集的最多樱桃数目:

从格子 (i,j) 出发,机器人可以移动到格子 (i+1, j-1),(i+1, j) 或者 (i+1, j+1) 。
当一个机器人经过某个格子时,它会把该格子内所有的樱桃都摘走,然后这个位置会变成空格子,即没有樱桃的格子。
当两个机器人同时到达同一个格子时,它们中只有一个可以摘到樱桃。
两个机器人在任意时刻都不能移动到 grid 外面。
两个机器人最后都要到达 grid 最底下一行。

示例 1:
在这里插入图片描述
输入:grid = [[3,1,1],[2,5,1],[1,5,5],[2,1,1]]
输出:24
解释:机器人 1 和机器人 2 的路径在上图中分别用绿色和蓝色表示。
机器人 1 摘的樱桃数目为 (3 + 2 + 5 + 2) = 12 。
机器人 2 摘的樱桃数目为 (1 + 5 + 5 + 1) = 12 。
樱桃总数为: 12 + 12 = 24 。
示例 2:
在这里插入图片描述
输入:grid = [[1,0,0,0,0,0,1],[2,0,0,0,0,3,0],[2,0,9,0,0,0,0],[0,3,0,5,4,0,0],[1,0,2,3,0,0,6]]
输出:28
解释:机器人 1 和机器人 2 的路径在上图中分别用绿色和蓝色表示。
机器人 1 摘的樱桃数目为 (1 + 9 + 5 + 2) = 17 。
机器人 2 摘的樱桃数目为 (1 + 3 + 4 + 3) = 11 。
樱桃总数为: 17 + 11 = 28 。
示例 3:

输入:grid = [[1,0,0,3],[0,0,0,3],[0,0,3,3],[9,0,3,3]]
输出:22
示例 4:

输入:grid = [[1,1],[1,1]]
输出:4

提示:

rows == grid.length
cols == grid[i].length
2 <= rows, cols <= 70
0 <= grid[i][j] <= 100

解题思路一:动态规划一般有自顶向下和自底向上两种编写方式,其中自顶向下也被称为「记忆化搜索」。

在这里插入图片描述
@lru_cache(None) 是 Python 中 functools 模块中的一个装饰器,它提供了一种缓存函数调用结果的机制。在该代码中,@lru_cache(None) 被应用在 dfs 函数上,意味着使用了一个无大小限制的缓存来存储函数调用的结果。这里有几点解释:

LRU Cache 的意义:LRU (Least Recently Used) 是一种缓存替换策略,即最近最少使用。当缓存满了的时候,LRU 算法会淘汰最近最少使用的项,以腾出空间来存储新的项。这种机制在动态规划中很有用,因为它可以避免重复计算。
@lru_cache(None) 的作用:@lru_cache(None) 将函数的结果缓存起来,以便在后续相同参数的调用时能够直接返回缓存中的结果,而不必重新计算。参数 None 表示使用无大小限制的缓存,这意味着所有的调用结果都会被缓存下来,直到程序结束或者手动清除缓存为止。
节省计算时间:在动态规划中,往往会有很多重复的子问题。使用缓存可以避免重复计算这些子问题,从而显著提高程序的运行效率。在该代码中,使用 @lru_cache(None) 可以避免在同一位置和状态下重复计算最大值。
总之,@lru_cache(None) 的作用是通过缓存函数调用的结果来避免重复计算,从而提高程序的运行效率,特别是在动态规划等需要大量重复计算的场景下非常有用。
在这里插入图片描述

class Solution:def cherryPickup(self, grid: List[List[int]]) -> int:m, n = len(grid), len(grid[0])def getValue(i, j1, j2):return grid[i][j1] + grid[i][j2] if j1 != j2 else grid[i][j1]@lru_cache(None)def dfs(i, j1, j2):if i == m - 1:return getValue(i, j1, j2)best = 0for dj1 in [j1 - 1, j1, j1 + 1]:for dj2 in [j2 - 1, j2, j2 + 1]:if 0 <= dj1 < n and 0 <= dj2 < n:best = max(best, dfs(i + 1, dj1, dj2))return best + getValue(i, j1, j2)return dfs(0, 0, n-1)

时间复杂度:O(mn2)
空间复杂度:O(mn2)

解题思路二:0


时间复杂度:O(n)
空间复杂度:O(n)

解题思路三:0


时间复杂度:O(n)
空间复杂度:O(n)


创作不易,观众老爷们请留步… 动起可爱的小手,点个赞再走呗 (๑◕ܫ←๑)
欢迎大家关注笔者,你的关注是我持续更博的最大动力


原创文章,转载告知,盗版必究



在这里插入图片描述


在这里插入图片描述
♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠ ⊕ ♠


http://www.ppmy.cn/embedded/37469.html

相关文章

矩阵的对称正定性判决(复习)

文章目录 本科学的数学知识忘的太快了 如何判断一个实矩阵是否是对称正定 在线性代数中&#xff0c;一个实对称矩阵是否为正定可以通过以下方法判断&#xff1a; 对称性&#xff1a; 首先&#xff0c;确认矩阵是否对称&#xff0c;即矩阵的转置是否等于其本身。 特征值检查&…

Npm基本解说

npm&#xff08;Node Package Manager&#xff09;是Node.js的一个包管理工具&#xff0c;它允许你安装、更新、卸载和发布Node.js应用程序的依赖项。下面我将详细解释npm的一些核心功能和用法。 1. 安装依赖项 你可以使用npm install命令来安装一个或多个依赖项。例如&#…

CH32V 系列 MCU IAP 使用函数形式通过传参形式灵活指定APP跳转地址

参考: CH32V 系列 MCU IAP 升级跳转方法 CH32V103 的 IAP 问题&#xff08;跳转及中断向量表重定位&#xff09; 1. 沁恒的RISC-V内核MCU的IAP跳转示例程序简要分析 沁恒的RISC-V内核的MCU比如CH32V203、CH32V307等系列的EVT包中IAP升级的示例程序中都是通过使能软件中断之后&…

OpenHarmony usb打开报错“usb fail error code = -3, error msg = LIBUSB_ERROR_ACCESS”

一、前言&#xff1a;最近公司项目需求&#xff0c;定位要求使用国产系统&#xff0c;国产系统无非就是 统信os &#xff0c;麒麟OS, 还有这两年比较热的 OpenHarmony。于是&#xff0c;老板要求公司产品适配OpenHarmony , 跟上时代步伐。 二、在开发中使用 usb 通讯时&#x…

SpringCloud中LoadBalancer负载均衡器配置

SpringCloud中LoadBalancer负载均衡器配置 依赖 <dependencies><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency><dependency><g…

C#-哈希表

哈希表&#xff08;Hash Table&#xff09;是一种数据结构&#xff0c;用于实现键值对之间的映射关系。在哈希表中&#xff0c;通过将键&#xff08;key&#xff09;通过哈希函数转换成索引&#xff0c;然后将值&#xff08;value&#xff09;存储在对应索引的位置上&#xff0…

暗区突围进不去/游戏无法启动/掉帧卡顿/报错的解决方法

暗区突围是一款高拟真硬核射击手游&#xff0c;打造了全新的沉浸式暗区战局体验&#xff0c;发行商是腾讯公司。这个游戏名词虽然看起来有些陌生&#xff0c;但其本身的玩法内核毫无疑问的是&#xff0c;这款游戏在画面质量和枪械操作方面&#xff0c;都是手游市场上同类游戏中…

TalkingGaussian:基于高斯溅射的结构保持3D说话人头合成

TalkingGaussian: Structure-Persistent 3D Talking Head Synthesis via Gaussian Splatting TalkingGaussian&#xff1a;基于高斯溅射的结构保持3D说话人头合成 Jiahe Abstract 摘要 TalkingGaussian: Structure-Persistent 3D Talking Head Synthes…