三维dp,LeetCode 1463. 摘樱桃 II

目录

一、题目

1、题目描述

2、接口描述

python3

cpp

3、原题链接

二、解题报告

1、思路分析

2、复杂度

3、代码详解

python3

cpp


一、题目

1、题目描述

给你一个 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 最底下一行。

2、接口描述

python3
class Solution:def cherryPickup(self, grid: List[List[int]]) -> int:
cpp
class Solution {
public:int cherryPickup(vector<vector<int>>& grid) {}
};

3、原题链接

1463. 摘樱桃 II


二、解题报告

1、思路分析

和昨天的每日一题一样的思路,二者只能往左下,右下,下三个方向走,那么走同样步数的情况下二者处于同一层

我们定义状态f(i, j, k)表示robot1走到(i, j),robot2走到(i, k)时的最大收益

那么有递推:f(i, j, k) = max(dfs(i + 1, j, k), dfs(i + 1, j, k + 1), dfs(i + 1, j, k - 1), 
                            dfs(i + 1, j + 1, k), dfs(i + 1, j + 1, k + 1), dfs(i + 1, j + 1, k - 1),
                                dfs(i + 1, j - 1, k), dfs(i + 1,j - 1, k + 1), dfs(i + 1, j - 1, k - 1)) + grid[i][j] + (grid[i][k] if j != k else 0)

我们可以选择记忆化搜索也可以选择递推的方式,二者皆可

2、复杂度

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

3、代码详解

python3
class Solution:def cherryPickup(self, grid: List[List[int]]) -> int:m = len(grid)n = len(grid[0])@cachedef dfs(i: int, j: int, k: int) -> int:if i >= m or j < 0 or j >= n or k < 0 or k >= n:return 0return max(dfs(i + 1, j, k), dfs(i + 1, j, k + 1), dfs(i + 1, j, k - 1), dfs(i + 1, j + 1, k), dfs(i + 1, j + 1, k + 1), dfs(i + 1, j + 1, k - 1),dfs(i + 1, j - 1, k), dfs(i + 1,j - 1, k + 1), dfs(i + 1, j - 1, k - 1)) + grid[i][j] + (grid[i][k] if j != k else 0)return dfs(0, 0, n - 1)
cpp
class Solution {
public:int cherryPickup(vector<vector<int>>& grid) {int m = grid.size(), n = grid[0].size();vector<vector<vector<int>>> f(m, vector<vector<int>>(n, vector<int>(n, -1)));function<int(int, int, int)> dfs = [&](int i, int j, int k){if(i >= m || j < 0 || j >= n || k < 0 || k >= n) return 0;int& res = f[i][j][k];if(~res) return res;res = grid[i][j] + (j != k) * grid[i][k] + max({ dfs(i + 1, j, k), dfs(i + 1, j, k + 1), dfs(i + 1, j, k - 1), dfs(i + 1, j + 1, k), dfs(i + 1, j + 1, k + 1), dfs(i + 1, j + 1, k - 1),dfs(i + 1, j - 1, k), dfs(i + 1,j - 1, k + 1), dfs(i + 1, j - 1, k - 1) });return res;};return dfs(0, 0, n - 1);}
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8292.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastJson==xml与json格式互转工具类

一、xml格式介绍 XML&#xff08;eXtensible Markup Language&#xff09;是一种标记语言&#xff0c;它的设计目的是为了存储和传输数据&#xff0c;而不是用于显示数据&#xff0c;这一点与HTML&#xff08;HyperText Markup Language&#xff09;不同。以下是XML的一些关键…

流畅的python-学习笔记_协议+继承优缺点

接口和协议 python动态语言&#xff0c;没有interface等概念&#xff0c;接口和协议方法有的也有替代品&#xff0c;所以类似于鸭子类型&#xff0c;只关注行为像鸭子&#xff0c;不关注它是不是鸭子。不是每个接口都得实现&#xff0c;这是允许的 猴子补丁 可动态给对象添加…

Java的BIO/NIO/AIO

1. Java中的BIO、NIO和AIO的基本概念及其主要区别 BIO (Blocking I/O): 传统的同步阻塞I/O模型。每个连接创建成功后都需要一个线程来处理&#xff0c;如果连接没有数据可读&#xff0c;则线程会阻塞在读操作上。这种模型简单易理解&#xff0c;但在高并发环境下会消耗大量系统…

ORACLE 19C RAC DIAG进程消耗大量内存的分析

近期一个ORACLE 19C的RAC环境&#xff0c;多次出现数据库实例的后台进程DIAG消耗很多内存&#xff08;达到20G&#xff09;&#xff0c;节点1、节点2都出现过次问题。 问题分析&#xff1a;通过对DIAG进程TRACE分析&#xff0c;结合在ORACLE官方后台进行问题、BUG查询匹配&…

【ITK配准】第七期 尺度(Metric)-Kullback-Leiber距离Metric

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 公众号:VTK忠粉 前言 本文分享ITK中的互信息Metric,即itk::KullbackLeiblerCompareHistogramImageToImageMetric,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! …

全局测试用例环境和访问共享资源的GoogleTest教程

全局测试用例环境和访问共享资源的GoogleTest教程 介绍 在软件开发中&#xff0c;测试是确保软件质量的关键步骤之一。GoogleTest是一个流行的C测试框架&#xff0c;它提供了丰富的功能来编写和运行测试用例。在实际的软件项目中&#xff0c;有时需要在测试用例之间共享一些资…

思腾合力受邀参加VALSE 2024视觉与学习青年学者研讨会

在充满学术氛围的五月&#xff0c;思腾合力荣幸受邀参加了于2024年5月5-7日在重庆举行的第十四届VALSE大会。作为视觉与学习领域的顶级交流平台&#xff0c;VALSE大会每年都吸引着全国专家与学者的目光。 本次大会不仅延续了往届的高水平学术研讨&#xff0c;还进一步拓宽了研究…

台湾精锐APEX行星减速机噪音产生及优化策略

台湾精锐APEX行星减速机在各种机械装置中的应用逐渐广泛。然而&#xff0c;其噪音问题也日益凸显。噪音不仅影响工作环境&#xff0c;还可能对设备的正常运行和使用寿命产生负面影响。因此&#xff0c;了解APEX行星减速机噪音的产生以及优化噪音问题变得至关重要。 APEX行星减…

安卓自动化脚本制作流程详解!

在移动应用日益普及的今天&#xff0c;安卓自动化脚本制作成为了开发者提高工作效率、减少重复劳动的重要手段&#xff0c;本文将详细介绍安卓自动化脚本的制作流程&#xff0c;并通过五段源代码的实例&#xff0c;帮助读者更好地理解和掌握这一过程。 一、安卓自动化脚本制作…

从U盘到云端:企业数据泄露的那些事

在企业的日常运营中&#xff0c;数据安全无疑是极为关键的一环。无论是U盘还是云&#xff0c;数据泄露事件的发生都可能导致企业的核心机密被窃取&#xff0c;甚至损害企业的商业利益和声誉。以下是关于从U盘到云端&#xff0c;企业数据泄露的一些常见情况和应对策略。 U盘&…

各种流量包特征

[CVE-2013-1966] Apache Struts2 远程命令执行漏洞 要执行的命令在exec里面&#xff0c;而且回显数据包里面有明显执行结果回显 [CVE-2017-8046] Spring Data Rest 远程命令执行漏洞 回显不明显&#xff0c;考试提供的解码工具不能解密&#xff0c; [CVE-2017-12149] JBOSS…

Kibana初始化启动失败原因及解决办法

一&#xff09; Unable to retrieve version information from Elasticsearch nodes 报错日志&#xff1a; 折叠源码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 [rootnode1 bin]# ./kibana --allow-root log [16:03:07.086] [info][plugins-service] Plugin &…

揭秘全网热门话题:抖音快速涨粉方法,巨量千川投流助你日增10000粉

在当今社交媒体的时代( 千川投流&#xff1a;hzzxar&#xff09;抖音成为了年轻人分享自己才华和生活的平台。然而&#xff0c;要在抖音上快速获得关注和粉丝&#xff0c;却不是一件容易的事情。今天&#xff0c;我们将揭秘全网都在搜索的抖音快速涨1000粉的秘籍&#xff0c;带…

API攻击为啥盛行,企业应该如何防范

一.API接口到底是什么 API,中文名称叫应用程序编程接口,是现代移动、SaaS 和 Web应用程序的一个关键组成部分。听起来很晦涩难懂,但其实我们每个人的生活都会接触 API:早上出门,打开手机看看天气,天气APP需要通过 API 提取数据;到了公司,被安排出差,赶紧上网查票,购票网站更新…

Python 基础入门

文章目录 路线配置环境2.语言3.数据结构 小结 路线 最近在写点东西&#xff0c;也在用一门之前没怎么用过的语言&#xff1b;python。写下我的学习途径及方法&#xff0c;仅供参考。 配置环境语言学习数据结构一些库的学习等等 配置环境 最开始&#xff0c;我用的事pycharm…

【3dmax笔记】027:配置修改器集、工具栏自定义与加载

文章目录 一、配置修改器集二、自定义工具栏三、加载工具栏 一、配置修改器集 可以把自己常用的修改命令放到右边框中的部分&#xff0c;便于自己的操作&#xff0c;省去了每次都要花半天时间找命令的尴尬。新建一个二维或者三维物体&#xff0c;点击修改面板&#xff0c;点击…

运算符重载:妈妈我会自己写运算符了

目录 一、题目&#xff1a; 二、分析&#xff1a; 1.矩阵&#xff08;matrix&#xff09;部分&#xff1a; 2.程序部分&#xff1a; 三、代码&#xff1a; 四、提升&#xff1a; 1、思路&#xff1a; 2、重载流插入运算符“<<” 3、代码&#xff1a; 五、进阶&…

尊享面试100题(314.二叉树的垂直遍历python)

题目关键词&#xff0c;从左到右&#xff0c;从上到下&#xff0c;那么使用bfs宽度优先算法。 使用字典v保存每一列的值。 class Solution:def verticalOrder(self, root: Optional[TreeNode]) -> List[List[int]]:if not root: return []v defaultdict(list)qu deque()…

Windows+Linux的虚拟串口工具

文章目录 1.Windows虚拟串口工具1.1 安装教程1.2 使用方法 2.Linux系统虚拟串口工具2.1 socat安装2.2 开启虚拟串口2.3 测试2.3.1 命令测试2.3.2 Cutecom工具测试 2.4 关闭虚拟串口 3.参考资料 1.Windows虚拟串口工具 下载地址&#xff1a;https://www.downxia.com/downinfo/4…

C 语言笔记:字符串处理函数

一、获取字符串长度函数 头文件&#xff1a;#include <string.h> 函数定义&#xff1a;size_t strlen(const char *s); 函数功能&#xff1a; 测字符指针 s 指向的字符串中字符的个数&#xff0c;不包括’\0’ 返回值&#xff1a;字符串中字符个数 #include <stdio.…