三维dp,LeetCode 741. 摘樱桃

一、题目

1、题目描述

给你一个 n x n 的网格 grid ,代表一块樱桃地,每个格子由以下三种数字的一种来表示:

  • 0 表示这个格子是空的,所以你可以穿过它。
  • 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它。
  • -1 表示这个格子里有荆棘,挡着你的路。

请你统计并返回:在遵守下列规则的情况下,能摘到的最多樱桃数:

  • 从位置 (0, 0) 出发,最后到达 (n - 1, n - 1) ,只能向下或向右走,并且只能穿越有效的格子(即只可以穿过值为 0 或者 1 的格子);
  • 当到达 (n - 1, n - 1) 后,你要继续走,直到返回到 (0, 0) ,只能向上或向左走,并且只能穿越有效的格子;
  • 当你经过一个格子且这个格子包含一个樱桃时,你将摘到樱桃并且这个格子会变成空的(值变为 0 );
  • 如果在 (0, 0) 和 (n - 1, n - 1) 之间不存在一条可经过的路径,则无法摘到任何一个樱桃。

2、接口描述

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

3、原题链接

741. 摘樱桃


二、解题报告

1、思路分析

本题溯源:[P1004 NOIP2000 提高组] 方格取数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

就是朴素二维网格dp的进阶版,leetcode在把竞赛上的经典题目搬到leetcode上

正着走一次反着走一次的最大收益等价于两个人同时从起点出发,到达终点的最大收益,这和NOIP那道题一模一样

对于一个人走我们定义f(i, j)为走到(i, j)的最大收益

两个人走,我们定义f(i, j, x, y)为A走到(i, j)B走到(x, y)的最大收益

考虑二人最终到达终点走的步数一样,可以优化状态为f(k, i, j)为两人都走k步,A走到(i, k - i),B走到(j, k - j)时的最大收益

每个人的上一个位置有两种,那么前驱状态就有四个,我们进行递推即可

由于递推要考虑边界,这里省事直接用记忆化搜索

2、复杂度

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

3、代码详解

python3
class Solution:def cherryPickup(self, g: List[List[int]]) -> int:n = len(g)@cache def dfs(k: int, i: int, j: int) -> int:if k < i or k < j or i < 0 or j < 0 or g[i][k - i] < 0 or g[j][k - j] < 0:return -infif not k:return g[0][0]return max(dfs(k - 1, i, j), dfs(k - 1, i - 1, j), dfs(k - 1, i, j - 1), dfs(k - 1, i - 1, j - 1)) + g[i][k - i] + (g[j][k - j] if i != j else 0)return max(dfs(n * 2 - 2, n - 1, n - 1), 0)
cpp
class Solution {
public:
static constexpr int N = 55, inf = 0x3f3f3f3f;
int f[N << 1][N][N];int cherryPickup(vector<vector<int>>& g) {memset(f, -1, sizeof f);int n = g.size();function<int(int, int, int)> dfs = [&](int k, int i, int j){if (k < i || k < j || i < 0 || j < 0 || g[i][k - i] < 0 || g[j][k - j] < 0)return -inf;if(!k) return g[0][0];int& res = f[k][i][j];if(~res) return res;res = max(max(dfs(k - 1, i, j), dfs(k - 1, i - 1, j)), max(dfs(k - 1, i, j - 1), dfs(k - 1, i - 1, j - 1))) + g[i][k - i] + (i != j) * g[j][k - j];return res;};return max(dfs(n * 2 - 2, n - 1, n - 1), 0);}
};

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

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

相关文章

设计一个people类 如何输入用户自定义个数的对象?

题目: 设计一个People 类&#xff0c;该类的数据成员有姓名、年龄、身高、体重和人数&#xff0c;其中人数为静态数据成员&#xff0c;成员函数有构造函数、显示和显示人数。其中构造函数由参数姓名、年龄、身高和体重来构造对象&#xff1b;显示函数用于显示人的姓名、年龄、…

PDF批量编辑:PDF转HTML批量操作技巧,提升文档格式转换效率

在数字化办公日益普及的今天&#xff0c;PDF&#xff08;Portable Document Format&#xff09;作为一种跨平台的文件格式&#xff0c;广泛应用于各种文档的存储和传输。然而&#xff0c;PDF文件的不可编辑性使得在某些情况下&#xff0c;我们需要将其转换为HTML格式以便更好地…

蓝桥杯备赛1.统计单词数

题目链接&#xff1a;P1308 [NOIP2011 普及组] 统计单词数 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) #include<bits/stdc.h> #define int long long #define endl \n const int N 1e510; using namespace std; int a[N]; signed main() {std::ios::sync_with_st…

【国产SSL】哪家SSL证书可以保证数据不出境,是在国内验签

随着网络安全的重视&#xff0c;网站安装SSL证书已经是标配了。但是为什么目前常见的SSL证书都是国外的&#xff1f;数据受国外掌控&#xff0c;安全吗&#xff1f;那么哪家国产品牌是可以保证数据不出境的呢&#xff1f; 为什么目前常见的SSL证书都是国外的&#xff1f; 原因…

您的计算机已被360勒索病毒感染?恢复您的数据的方法在这里!

引言 .360勒索病毒&#xff0c;作为BeijingCrypt勒索病毒家族的一员&#xff0c;因其独特的加密技术和狡猾的传播方式&#xff0c;已成为网络安全领域的重大威胁。它不仅能加密用户的重要文件&#xff0c;使文件无法被正常访问和使用&#xff0c;还可能进一步破坏系统&#xf…

ssh连接服务器教程,账号密码登陆和通过密钥直接登陆

ssh如何连接服务器&#xff1f; 两种连接方式 通过账号密码登陆通过密钥直接登陆 通过账号密码登陆 在终端使用命令登陆&#xff1a;ssh [服务器用户名][服务器ip或服务器域名]之后输入服务器用户密码即可登陆 通过密钥直接登陆 首先在本地创建自己的私钥公钥&#xff0c…

Java苍穹外卖05-订单状态定时处理-数据统计-导出excel

一、订单状态定时处理 1.Spring Task ①介绍 应用场景&#xff1a; ②cron表达式 https://cron.qqe2.com/ ③入门案例 2.需求分析 3.代码开发 每一分钟检查是否存在超时15分钟的订单 每天凌晨一点处理上一条处于派送中的订单 mapper&#xff1a; 二、来单提醒、客户催单 1…

WPF (Windows Presentation Foundation) 中 Attribute(属性)和 Property(属性)

在 WPF (Windows Presentation Foundation) 中&#xff0c;Attribute&#xff08;属性&#xff09;和 Property&#xff08;属性&#xff09;是两个相关但不同的概念。 Attribute&#xff08;属性&#xff09;是一种元数据&#xff0c;用于给类型、成员或其他代码元素添加附加…

手撕C语言题典——移除链表元素(单链表)

目录 前言 一.思路 1&#xff09;遍历原链表&#xff0c;找到值为 val 的节点并释放 2&#xff09;创建新链表 二.代码实现 1)大胆去try一下思路 2&#xff09;竟然报错了&#xff1f;&#xff01; 3&#xff09;完善之后的成品代码 搭配食用更佳哦~~ 数据结构之单…

CellChat包文献介绍

Inference and analysis of cell-cell communication using CellChat - PubMed (nih.gov) 目录 在线数据 摘要 基础介绍 分析结果 1&#xff0c;概述 2&#xff0c;识别预测通路 3&#xff0c;连续的信号转导 4&#xff0c;预测空间共定位细胞群之间的关键信号转导事件…

算法随想录第四天打卡|24. 两两交换链表中的节点,19.删除链表的倒数第N个节点,面试题 02.07. 链表相交 ,142.环形链表II

24. 两两交换链表中的节点 用虚拟头结点&#xff0c;这样会方便很多。 本题链表操作就比较复杂了&#xff0c;建议大家先看视频&#xff0c;视频里我讲解了注意事项&#xff0c;为什么需要temp保存临时节点。 题目链接/文章讲解/视频讲解&#xff1a; 代码随想录 Python # De…

Al Agent:开启智能化未来的关键角色,让机器更智能的为我们服务

文章目录 &#x1f680;Al Agent是什么&#x1f4d5;Al Agent的工作原理与技术&#x1f4aa;Al Agent应用领域&#x1f680;智能家居应用&#x1f308;医疗健康领域⭐金融服务行业&#x1f302;交通运输管理&#x1f3ac;教育培训应用 &#x1f512;Al Agent优势与挑战✊Al Age…

mdio 的匹配与探测

关键结构体定义 struct phy_device { struct mdio_device mdio; } struct phy_driver { struct mdio_driver_common mdiodrv; } struct mdio_driver_common { struct device_driver driver; int flags; }; 1.1 总线匹配函数 struct bus_type mdio_bus_type { …

码题杯 世界警察 思想:双指针

https://www.matiji.net/exam/brushquestion/4/4446/16A92C42378232DEB56179D9C70DC45C 双指针 思路是这样的&#xff0c;首先r指针向右走&#xff0c;如果r指针遇到了和l指针一样的&#xff0c;那么l指针就&#xff0c;一直加到r指针的位置&#xff0c;此时a[l]a[r]&#xff0…

Flutter 首次亮相 Google Cloud Next 大会

作者 / Kelvin Boateng Flutter 团队在近期首次参加了 Google Cloud Next 大会&#xff0c;这意味着 Flutter 在开发社区中的影响力正在日益增长。 Google Cloud Next https://cloud.withgoogle.com/next 我们与 Google Cloud、Firebase、Very Good Ventures 和 Serverpod 的团…

双向链表(详解)

在单链表专题中我们提到链表的分类&#xff0c;其中提到了带头双向循环链表&#xff0c;今天小编将详细讲下双向链表。 话不多说&#xff0c;直接上货。 1.双向链表的结构 带头双向循环链表 注意 这几的“带头”跟前面我们说的“头节点”是两个概念&#xff0c;实际前面的在…

【大学物理】东北大学-马文蔚听课笔记

4.1刚体的定轴转动_哔哩哔哩_bilibili 此笔记为课堂学习笔记~ 4.1刚体的定轴转动 基本教学要求 什么时刚体呢&#xff1f; 研究刚体运动切口 平动&#xff1a;刚体中所有的点的运动轨迹都完全相同。 转动&#xff1a;分为&#xffe5;定轴转动和非定轴转动 刚体转动的角速度…

【Unity 2D物理系统:触发】

在Unity的2D物理系统中&#xff0c;触发器&#xff08;Trigger&#xff09;是一种特殊的碰撞检测机制&#xff0c;它允许开发者检测到物体进入或离开特定区域时发生的动作&#xff0c;而不会影响物体的实际物理运动。触发器通常用于非物理交互的场景&#xff0c;如检测玩家进入…

vue3 antd-vue 超简单方式实现a-table跨页勾选

一、效果如下&#xff1a; 第一页勾选了2&#xff0c; 3&#xff0c; 4 翻到第三页勾选24&#xff0c; 25 回显&#xff0c;如比返回第一页的时候触发分页改变&#xff0c; 在映射中的第一页的数据给到a-table绑定的state.selectedRowKeys即可&#xff0c;如下方法 二、勾选思路…

管理层、团队、效能指标 如何平衡

管理层、团队、效能指标 如何平衡 效能指标效能指标是团队成长的唯一标准吗&#xff1f;管理层、团队和效能指标之间应该保持怎样的距离&#xff1f;效能治理容易踩进哪些陷阱&#xff1f;在团队中&#xff0c;效能治理最重要的是什么&#xff1f; 在说到管理层、团队和效能指标…