leetcode-记忆化深搜/动态规划v1_林冲风雪山神庙的博客-CSDN博客
741. 摘樱桃
我的错误解法
class Solution(object):
def cherryPickup(self, grid):
"""
:type grid: List[List[int]]
:rtype: int
"""
#两个人同时从起点摘樱桃
def dfs(x1,y1,x2,y2):
if x1 >= len(grid) or y1 >= len(grid) or x2 >= len(grid) or y2 >= len(grid):
return float("-inf")
if grid[x1][y1] == -1 or grid[x2][y2] == -1:
return float("-inf")
if (x1,y1) == (x2,y2):
res = grid[x1][y1]
else:
res = grid[x1][y1] + grid[x2][y2]
res += max(dfs(x1+1,y1,x2,y2),dfs(x1,y1+1,x2,y2))
res += max(dfs(x1,y1,x2+1,y2),dfs(x1,y1,x2,y2+1))
return res
return dfs(0,0,0,0)
class Solution:
def cherryPickup(self, grid: List[List[int]]) -> int:
@lru_cache(None)
def dfs(x1,y1,x2,y2):
if x1 > len(grid)-1 or x2 > len(grid)-1 or y1 > len(grid[0])-1 or y2 > len(grid[0])-1:
return float('-inf')
if grid[x1][y1] == -1 or grid[x2][y2] == -1:
return float('-inf')
# # 到终点
if x1 == y1 == x2 == y2 == len(grid)-1:
return grid[x1][y1]
res = 0
if (x1,y1) == (x2,y2):
res += grid[x1][y1]
else:
res += grid[x1][y1] + grid[x2][y2]
#从两个点的移动方向中找最大的,两个人同时移动
res += max(dfs(x1+1,y1,x2+1,y2),dfs(x1,y1+1,x2,y2+1),dfs(x1+1,y1,x2,y2+1),dfs(x1,y1+1,x2+1,y2))
return res
res = dfs(0,0,0,0)
if res == float("-inf"):
return 0
return res
174. 地下城游戏
1692. 计算分配糖果的不同方式