LeetCode-5411、摘樱桃 II-困难
LeetCode-5411、摘樱桃 II-困难
给你一个 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
代码:
class Solution:def cherryPickup(self, grid: List[List[int]]) -> int:m, n = len(grid), len(grid[0])f = [[[-1] * n for _ in range(n)] for i in range(m)]f[0][0][-1] = grid[0][0] + grid[0][-1]ans = 0for i in range(1, m):for j in range(n):for k in range(n):t = -1for u in range(j-1, j+2):for v in range(k-1, k+2):if 0 <= u < n and 0 <= v < n and f[i-1][u][v] > t:t = f[i-1][u][v]if t > -1:f[i][j][k] = grid[i][j] + tif k != j:f[i][j][k] += grid[i][k]ans = max(ans, f[i][j][k])return ans
LeetCode-5411、摘樱桃 II-困难相关推荐
- LeetCode 1463. 摘樱桃 II(dp)
题意: 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地. grid 中每个格子的数字表示你能获得的樱桃数目.你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发 ...
- Leetcode 741. 摘樱桃 C++
Leetcode 741. 摘樱桃 题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一 ...
- LeetCode 741. 摘樱桃___贪心算法篇__失败
741. 摘樱桃 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然 ...
- 【LeetCode】摘樱桃 [H](记忆化搜索)
741. 摘樱桃 - 力扣(LeetCode) 一.题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示 ...
- LeetCode 741 摘樱桃(动态规划)
一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. -1 ...
- LeetCode 741. 摘樱桃(dp)
题意: 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示:0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. ...
- 【数据结构与算法】之深入解析“摘樱桃II”的求解思路与算法示例
一.题目要求 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地,grid 中每个格子的数字表示你能获得的樱桃数目.你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) ...
- [leetcode]741摘樱桃,动态规划
题目表明去终点只能往下和往右,回去只能往上和往左,统计路程中经过的樱桃个数,那么就相当于从起点出发两次到终点,但两次路过到的同个樱桃就不能再重复计算,这两次不分先后,同时走深搜,然后用dp表示每个状态 ...
- 力扣1463——摘樱桃 II(多状态动态规划)
解题思路 机器人可以往左中右三个方向往下走,也即是每个位置可以由上一行的左中右三个位置转移来: 对于有两个机器人,也就是在每一行时机器人的位置有n×n种组合,那就把每种状态都记录下来: 对于当前行dp ...
- 【网格 dp】A002_LC_摘樱桃 I~II 传纸条(基于对角线定理(记忆化 / dp))
一.摘樱桃 I 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后 ...
最新文章
- linux yum及yum仓库
- 探究java-JVM的五步(三步)类加载机制(包含类加载过程的一些代码书写,如类加载代码)
- C++(18)--复制构造函数
- Web3.js 学习
- 【LeetCode】4月3日打卡-Day19-字符串转整数
- dumpsys gfxinfo packacges计算帧率
- Linux2.6用户空间堆栈区的分配与回收
- matlab 实现同态滤波算法 并于直方均衡化相比较 看看谁的效果更好
- 中国石油大学(北京)本科毕业论文答辩PPT模板
- 用python在大麦网抢票攻略_大麦网抢票有什么攻略?
- kylin安装以及遇见到的一些问题和解决方法
- php 字符串编码方式转换,php字符串编码转换的常用几种方法_PHP教程
- 〖Python WEB 自动化测试实战篇③〗- python-selenium环境配置搭建
- 像中文的罗马音字体复制_罗马音大全可复制app中文下载
- 企业信息化建设规划大纲
- 【大学物理·静止电荷的电场】静电场的环路定理 电势
- 【Nas/群晖/服务器】FRP内网穿透实现外网访问
- 2021年安全员-C证(江西省)考试题库及安全员-C证(江西省)考试技巧
- office中为何还要保留Access数据库? 【3500人回复】知乎
- 青蛙跳台阶问题——《剑指offer》
热门文章
- gae怎么打开谷歌学术?_Google App Engine(GAE)Java API第3部分:API入门
- Flann在python3中的实现
- python mysql增删改查
- Android密码学相关
- Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView
- ppt打不开了怎么修复
- 编写一个算法,统计从键盘输入的一个英文句子单词总数
- Linux中关于samba的几个问题
- DomoloSEOHelper 多么乐SEO助手 预览版发布啦
- qdialog 只有点击才能获得焦点_白内障一定要“熟透了”才能手术吗?