1463.摘樱桃II
链接:1463.摘樱桃II
难度:Hard
标签:数组、动态规划、矩阵
简介:你有两个机器人帮你收集樱桃,机器人 1 从左上角格子 (0,0) 出发,机器人 2 从右上角格子 (0, cols-1) 出发。请你按照如下规则,返回两个机器人能收集的最多樱桃数目。
题解 1 - python
- 编辑时间:2024-05-07
- 执行用时:871ms
- 内存消耗:57.7MB
- 编程语言:python
- 解法介绍:dfs记录当前x坐标下,第一个人在y1,第二个人在y2时的最大樱桃数。
class Solution:
def cherryPickup(self, grid: List[List[int]]) -> int:
n, m = len(grid), len(grid[0])
dirs = [1, 0, -1]
@cache
def dfs(x: int, y1: int, y2: int) -> int:
if x == n: return 0
res = 0
for dir in dirs:
ny1 = y1 + dir
if 0 <= ny1 < m:
for dir in dirs:
ny2 = y2 + dir
if 0 <= ny2 < m:
res = max(res, dfs(x + 1, ny1, ny2))
res += grid[x][y1]
if y1 != y2: res += grid[x][y2]
return res
return dfs(0, 0, m - 1)