跳到主要内容

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)