741. Cherry Pickup(摘樱桃)

Git Cherry-pick (摘樱桃) 实现分支的部分提交合并到Master 何为摘樱桃: git cherry-pick 可以选择某一个分支中的一个或几个commit(s)来进行操作。一般用作 master 选择其他分支的"樱桃????"进行选择性"摘取"提交,通俗的说就是:在dev的n多次提交里面把需要上线的代码有选择的合并到master. 使用场景: 稳定版本分支1与开发版本分支2,不能直接把两个分支合并,否则会导致版本混乱,要将分支2中的功能合入到分支1,则可以使用... 阅读详情

You are given an n x n grid representing a field of cherries, each cell is one of three possible integers.

0 means the cell is empty, so you can pass through,
1 means the cell contains a cherry that you can pick up and pass through, or
-1 means the cell contains a thorn that blocks your way.
Return the maximum number of cherries you can collect by following the rules below:

Starting at the position (0, 0) and reaching (n - 1, n - 1) by moving right or down through valid path cells (cells with value 0 or 1).
After reaching (n - 1, n - 1), returning to (0, 0) by moving left or up through valid path cells.
When passing through a path cell containing a cherry, you pick it up, and the cell becomes an empty cell 0.
If there is no valid path between (0, 0) and (n - 1, n - 1), then no cherries can be collected.

Example 1:
在这里插入图片描述
Input: grid = [[0,1,-1],[1,0,-1],[1,1,1]]
Output: 5
Explanation: The player started at (0, 0) and went down, down, right right to reach (2, 2).
4 cherries were picked up during this single trip, and the matrix becomes [[0,1,-1],[0,0,-1],[0,0,0]].
Then, the player went left, up, up, left to return home, picking up one more cherry.
The total number of cherries picked up is 5, and this is the maximum possible.

给一个二维grid数组,其中每个位置上的0代表没有樱桃,1代表有一个樱桃,-1代表此路不通。
问从[0][0]走到[n-1][n-1]再从[n-1][n-1]返回[0][0]最多能摘多少个樱桃。
只能向右或向下,返回时只能向左或向上。

思路:
可能会想到用两次 采集最多的DP
但是有个反例,
在这里插入图片描述
第一次DP沿中间全是1的路到右下角,再从右下角回去的时候不可能同时采到左右两边的樱桃。

问题转换:
假设两个人从[0][0]出发到[n-1][n-1],他们走到同一位置的时候只有一个人能摘樱桃。
假设第一个人的坐标是(x1, y1),只能向右或向下,即x1 + 1或y1 + 1
第二个人坐标(x2, y2),移动时只能x2 + 1, y2 + 1
即两个人的x,y坐标有一个要+1
起点是一样的, 所以x1 + y1 = x2 + y2,得到y2 = x1 + y1 - x2,可降一维

所以两个人走到一个位置时,他们获得的樱桃数为grid[x1][y1] + grid[x2][y2](x1,y1不同于x2, y2时加)+ 他们之前位置获得的樱桃数。
两个人的移动方向有4种,其中y2由计算得到:
右, 右 :y1+1, (y2+1)
右, 下 :y1+1, x2+1
下, 右 :x1+1, (y2+1)
下, 下 :x1+1, x2+1

可得到dp[x1][y1][x2] = grid[x1][y1] + max(dp[x1][y1+1][x2], dp[x1][y1+1][x2+1], dp[x1+1][y1][x2], dp[x1+1][y1][x2+1]) + grid[x2][y2](x1,y1不同于x2, y2时加)

当两人同时到达[n-1][n-1]时到达终点条件,返回grid[n-1][n-1]

class Solution {
    int[][][] dp;
    int n = 0;
    int[][] grid;
    public int cherryPickup(int[][] grid) {
        n = grid.length;
        dp = new int[n][n][n];
        this.grid = grid;
        for(int i = 0; i < n; i++) {
            for(int j = 0; j < n; j++) {
                //区分未探索和已探索的
                Arrays.fill(dp[i][j], Integer.MIN_VALUE);
            }
        }
        //2个人同时从[0][0]到[n-1][n-1]
        return Math.max(0, getCherry(0, 0, 0)); //未到达时getCherry为负值
    }
    
    int getCherry(int x1, int y1, int x2) {
        int y2 = x1 + y1 - x2;
        //不能返回-1,因为-1和樱桃数相加可能会>0
        if(x1 >= n || y1 >= n || x2 >= n || y2 >= n) return -9999;
        if(grid[x1][y1] == -1 || grid[x2][y2] == -1) return dp[x1][y1][x2] = -9999;
        //到达终点条件
        if(x1 == n-1 && y1 == n-1) return grid[x1][y1];
        if(dp[x1][y1][x2] != Integer.MIN_VALUE) return dp[x1][y1][x2];
        int result = Math.max(Math.max(getCherry(x1+1, y1, x2), getCherry(x1, y1+1, x2)), 
                             Math.max(getCherry(x1+1, y1, x2+1), getCherry(x1, y1+1, x2+1)));
        result += grid[x1][y1];
        //在同一位置时只能摘一次
        if(x1 != x2) result += grid[x2][y2];
        return dp[x1][y1][x2] = result;
    }
}
LeetCode刷题:741. Cherry Pickup —摘樱桃 动态规划 LeetCode刷题:741. Cherry Pickup —摘樱桃 动态规划 原题链接:https://leetcode.com/problems/cherry-pickup/ In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 means the... 阅读详情

相关推荐

实战指南:如何用DCCRN模型提升语音增强效果(附代码示例)

本文提供了基于DCCRN模型进行语音增强的实战指南。通过深入解析复数网络如何协同处理语音的幅度与相位信息,并附有完整的PyTorch代码实现,帮助开发者从数据准备、模型搭建到训练调优,构建高效的实时语音增强系统,有效提升嘈杂环境下的语音清晰度。

weixin_29054245的博客 478

leetcode 741. Cherry Pickup 来回摘樱桃 + 深度优先遍历DFS + 动态规划DP

In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through; 1 means the cell contains a cherry, that you can pi...

JackZhangNJU的专栏 2542

VMware ESXI 7.0实战:4T硬盘RAID1配置与性能调优全记录

本文详细记录了在VMware ESXI 7.0环境下,为Dell服务器配置两块4T硬盘组建RAID1并进行深度性能调优的全过程。文章重点解析了RAID控制器写入策略(Write-Back with BBU)、读取策略(Read-Ahead)的关键选择,并深入探讨了在ESXI虚拟机层面通过选用PVSCSI控制器、调整虚拟磁盘缓存策略(scsiX:Y.caching)等技巧,以最大化满足数据分析等IO密集型工作负载的需求,最终实现性能的显著提升。

gaochao的博客 257

git cherry-pick 摘樱桃

cherry pick 英语摘樱桃,取这个名字的人,一定很喜欢樱桃。 git的分支就像一樱桃树,commit就像樱桃。摘樱桃就像是把另一个分支的樱桃摘(实际是克隆)过来变成自己的樱桃。 如果工作区不干净,会报: error: Your local changes to the following files would be overwritten by merge 如果缓存区不干净,会报: error: your local changes would be overwritten by .

xjj1314的专栏 5440

ThingsBoard入门实战(七):公共发布和 UI 细节修改

公共发布和 UI 细节修改7.细节修改和公共发布一、公共发布二、UI优化下载运行修改三、下一步还可以做什么?更好的UI更丰富的系统模块 7.细节修改和公共发布 GET到新技能了,想给兄弟们演示,需要给他们每个人一个账号么? 答案肯定是:不需要! ThingsBoard 用 公共发布 解决了这个问题。 一、公共发布 首先我们来看一下路灯设备现在在谁名下? 如下图,路灯都是customerA的, 目前只有它和它的租户可以看到,其他人需要看就需要设为公有。 如图操作: 对于设备详情仪表盘,我们也需要设为公有

AIGC搞起 9116

大模型的安全发展与安全治理

2022 年底,OpenAI 推出的 ChatGPT 在文本生成领域实现了重大突破,引领了大模型技术的发展方向,推动了各式各样的基座大模型及行业大模型的发展,并逐步向多模态和具身化方向迅速演进。显然,大模型展现出的强大能力为人工智能通用化揭开了序幕。然而,大模型技术的安全性也面临着生成内容的安全性、伦理道德等重大挑战。只有积极确保大模型的安全性,才能更有效地推动其持续发展,进而更好地应对大模型技术变革所带来的机遇与挑战。

qq_41432686的博客 2582

JAVA程序设计:摘樱桃(LeetCode:741)

一个N x N的网格(grid)代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它。 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它。 -1 表示这个格子里有荆棘,挡着你的路。 你的任务是在遵守下列规则的情况下,尽可能的摘到最多樱桃: 从位置(0, 0) 出发,最后到达 (N-1, N-1) ,只能向下或向右走,并且只能穿越有效的格子...

信仰.的博客 957

【ZZULIOJ】郑州轻工业大学oj题解整合

写在前面 关于ZZULIOJ题解 学习编程,想要巩固无非就是刷题或者做项目,然后因为我大一开始是刷郑轻的题目,就想着自己整合一下自己写的题目。既是复习也是笔记吧。 题解(内有题目描述) 1000 整数a+b 1001 植树问题 1002 简单多项式求值 1003 两个整数的四则运算 1004 三位数的数位分离 1005 整数幂 1006 求等差数列的和 1007 鸡兔同笼 1008 美元和人民币 1009 求平均分 1010 求圆的周长和面积 1011 圆柱体表面积 1012 求绝对值 1013 求两点间

蒟蒻乱写的博客 29万+

idea 部分代码合并、cherry-pick 摘樱桃

考虑这样一个场景,你在dev环境开发了A、B两个功能,但因某些原因,B功能不能正常上线了,所以需要把A功能摘出来合并到release分支提测上线。为了避免手工拷贝代码出错,提高工作效率,此时可以使用cherry-pick功能! 打开文章来了解具体怎么操作吧!

leo187的博客 2172

安卓应用锁开发实战:如何通过拦截Activity启动实现密码验证(附完整代码)

本文深入探讨了在安卓系统中开发应用锁功能的两种实战方案:通过修改ActivityStarter源码或实现IActivityController接口来拦截Activity启动流程,从而实现启动前的密码验证。文章详细对比了两种方案的技术选型、实现细节与适用场景,并提供了处理隐式Intent、验证状态管理等核心问题的完整代码,为开发系统级安全功能提供了实用指南。

tcp8optimizer的博客 456

YOLOv12改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

《YOLOv12高效涨点改进专栏》提供500+创新改进方案,涵盖卷积、主干网络、注意力机制等模块优化,适用于检测、分割等任务。改进点来自顶会论文和个人经验,支持多种模型版本和任务场景。专栏包含详细教程、数据集增强、性能评估工具等,帮助科研人员快速实现模型优化和论文发表。提供完整运行项目和环境配置指导,适合计算机及相关专业研究人员使用,持续更新保障长期科研需求。

Ai缝合怪、助力小伙伴高效发论文 2297

【Leetcode】741. Cherry Pickup 741. 摘樱桃

解法 总而言之是DP的解法 把问题转换成有2个人从左上向右下走,一共能摘到的樱桃的最大数量 每个人都要走m+n-2步,走第t步时的状态可以表示为(t,r1,c1,r2,c2) 当然,这个五元组是冗余的,只需要三维就可以表示这个向量了,因为: t = r1+c1=r2+c2 在每个时刻,每个人都可以向下或向右,所以总共会产生4种情况: p1向下,p2向下:(t+1,r1+1,c1,r2+1,c...

lemonmillie的博客 502

Python爬虫实战:利用最新技术高效爬取百度贴吧帖子内容

本文将详细介绍如何使用Python最新技术栈构建一个高效的百度贴吧爬虫,包括requests-html异步请求、BeautifulSoup4解析、数据存储到MongoDB以及应对反爬机制等完整解决方案。文章包含5000余字详细教程和完整代码实现。网络爬虫(Web Crawler)是一种自动获取网页内容的程序,广泛应用于搜索引擎、数据分析和内容聚合等领域。Python凭借其丰富的库生态系统成为爬虫开发的首选语言。贴吧作为中文互联网最大的兴趣社区,包含大量有价值的UGC内容。动态加载内容处理登录状态维持。

2201_76125261的博客 540

[Swift]LeetCode741. 摘樱桃 | Cherry Pickup

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs.com/strengthen/)➤GitHub地址:https://github.com/strengthen/LeetCode➤原文地址:https://www.cnblogs.com/stren...

weixin_30856725的博客 324

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

求助 :741Cherry Pickup:采樱桃

这道题不理解啊,不是不理解他的思路,而是为什么换一种写法不能AC.... In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through;1 means

小雄鹿的博客 567

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Leetcode:741. Cherry Pickup

c++code:class Solution { public: int cherryPickup(vector<vector<int>>& grid) { int n = grid.size(); int maxK = 2 * n - 1; int dp[maxK][n][n] = {-1}; memset(dp, -1, sizeof(dp)); for(

lyy_g的博客 740

2024-5-6——摘樱桃

2024-5-6 摘樱桃 动态规划

weixin_42075274的博客 1218

LeetCode //C - 741. Cherry Pickup

Abstract: This problem requires collecting the most cherries from the starting point (0,0) to the end point (n-1,n-1) in an n×n grid. The rules are: movement can only be to the right or down (outbound) and left or up (return), cannot pass through thorns (-

Made in Code 1113

【Leetcode】741. Cherry Pickup

题目地址: https://leetcode.com/problems/cherry-pickup/ 给定一个正方形矩阵,里面的数都是000、111或者−1-1−1,111代表有樱桃,000代表空地,可以走过去,−1-1−1代表障碍物,不能走过去。现在要求从(0,0)(0,0)(0,0)出发,每次只能向右或者向下走,走到(n−1,n−1)(n-1,n-1)(n−1,n−1),沿途不可以走到障碍物上...

数学、算法爱好者的博客 424

Cherry Pickup解题心得

Cherry Pickup解题心得 来源:https://leetcode.com/problems/cherry-pickup/description/ 题目复述输入一个n x n大小的地图,地图中的每个位置值包含三种值(-1, 0, 1),其中:-1:代表不允许通过 0:代表可以通过 1:代表可以通过,而且路上有个Cherry(樱桃)例如,输入: Input: grid = [[0, 1,

weixin_35816017的博客 781

741. Cherry Pickup

741. Cherry Pickup方法1: dynamic programmingComplexity In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through; ...

wilzxu的博客 210

LeetCode 741. Cherry Pickup

一、题目描述 In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through; 1 means the cell contains a cherry, that you ...

AzureoSky的博客 364

【LeetCode 741】 Cherry Pickup

题目描述 In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through; 1 means the cell contains a cherry, that you can...

iCode_girl的博客 736

[Leetcode] 741. Cherry Pickup 解题报告

题目: In a N x N grid representing a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through; 1 means the cell contains a cherry, that

魔豆(Magicbean)的博客 1302

Leetcode 741. Cherry Pickup dp

In a N x Ngridrepresenting a field of cherries, each cell is one of three possible integers. 0 means the cell is empty, so you can pass through; 1 means the cell contains a cherry, that you can pi...

salmonwilliam的博客 545
上一篇: 双线性插值
下一篇: leetcode 146. LRU Cache
蓝羽飞鸟
博客等级 码龄8年 1万+粉丝 727原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蓝羽飞鸟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值