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-困难相关推荐

  1. LeetCode 1463. 摘樱桃 II(dp)

    题意: 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地. grid 中每个格子的数字表示你能获得的樱桃数目.你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发 ...

  2. Leetcode 741. 摘樱桃 C++

    Leetcode 741. 摘樱桃 题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一 ...

  3. LeetCode 741. 摘樱桃___贪心算法篇__失败

    741. 摘樱桃 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然 ...

  4. 【LeetCode】摘樱桃 [H](记忆化搜索)

    741. 摘樱桃 - 力扣(LeetCode) 一.题目 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示 ...

  5. LeetCode 741 摘樱桃(动态规划)

    一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. -1 ...

  6. LeetCode 741. 摘樱桃(dp)

    题意: 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示:0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后穿过它. ...

  7. 【数据结构与算法】之深入解析“摘樱桃II”的求解思路与算法示例

    一.题目要求 给你一个 rows x cols 的矩阵 grid 来表示一块樱桃地,grid 中每个格子的数字表示你能获得的樱桃数目.你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) ...

  8. [leetcode]741摘樱桃,动态规划

    题目表明去终点只能往下和往右,回去只能往上和往左,统计路程中经过的樱桃个数,那么就相当于从起点出发两次到终点,但两次路过到的同个樱桃就不能再重复计算,这两次不分先后,同时走深搜,然后用dp表示每个状态 ...

  9. 力扣1463——摘樱桃 II(多状态动态规划)

    解题思路 机器人可以往左中右三个方向往下走,也即是每个位置可以由上一行的左中右三个位置转移来: 对于有两个机器人,也就是在每一行时机器人的位置有n×n种组合,那就把每种状态都记录下来: 对于当前行dp ...

  10. 【网格 dp】A002_LC_摘樱桃 I~II 传纸条(基于对角线定理(记忆化 / dp))

    一.摘樱桃 I 一个N x N的网格(grid) 代表了一块樱桃地,每个格子由以下三种数字的一种来表示: 0 表示这个格子是空的,所以你可以穿过它. 1 表示这个格子里装着一个樱桃,你可以摘到樱桃然后 ...

最新文章

  1. linux yum及yum仓库
  2. 探究java-JVM的五步(三步)类加载机制(包含类加载过程的一些代码书写,如类加载代码)
  3. C++(18)--复制构造函数
  4. Web3.js 学习
  5. 【LeetCode】4月3日打卡-Day19-字符串转整数
  6. dumpsys gfxinfo packacges计算帧率
  7. Linux2.6用户空间堆栈区的分配与回收
  8. matlab 实现同态滤波算法 并于直方均衡化相比较 看看谁的效果更好
  9. 中国石油大学(北京)本科毕业论文答辩PPT模板
  10. 用python在大麦网抢票攻略_大麦网抢票有什么攻略?
  11. kylin安装以及遇见到的一些问题和解决方法
  12. php 字符串编码方式转换,php字符串编码转换的常用几种方法_PHP教程
  13. 〖Python WEB 自动化测试实战篇③〗- python-selenium环境配置搭建
  14. 像中文的罗马音字体复制_罗马音大全可复制app中文下载
  15. 企业信息化建设规划大纲
  16. 【大学物理·静止电荷的电场】静电场的环路定理 电势
  17. 【Nas/群晖/服务器】FRP内网穿透实现外网访问
  18. 2021年安全员-C证(江西省)考试题库及安全员-C证(江西省)考试技巧
  19. office中为何还要保留Access数据库? 【3500人回复】知乎
  20. 青蛙跳台阶问题——《剑指offer》

热门文章

  1. gae怎么打开谷歌学术?_Google App Engine(GAE)Java API第3部分:API入门
  2. Flann在python3中的实现
  3. python mysql增删改查
  4. Android密码学相关
  5. Cocos2d-x 3.2 大富翁游戏项目开发-第五部分 单机游戏-级别选择ScrollView
  6. ppt打不开了怎么修复
  7. 编写一个算法,统计从键盘输入的一个英文句子单词总数
  8. Linux中关于samba的几个问题
  9. DomoloSEOHelper 多么乐SEO助手 预览版发布啦
  10. qdialog 只有点击才能获得焦点_白内障一定要“熟透了”才能手术吗?