LCOF 47. Maximum Value of Presents

algo

链接:剑指 Offer 47. 礼物的最大价值 - 力扣(LeetCode)

做法:动态规划

从左上到右下的路径和的最大值,DP 问题。f(i, j) 基于 f(i-1,j)f(i,j-1),每次取这两个的最大值再加上本格子的值即可。

class Solution:
  def maxValue(self, grid: List[List[int]]) -> int:
    m = len(grid)
    n = len(grid[0])
    dp = [[0] * n for _ in range(m)]
    dp[0][0] = grid[0][0]
    for i in range(m):
      for j in range(n):
        dp[i][j] = grid[i][j] + max(i and dp[i-1][j], j and dp[i][j-1])
    return dp[-1][-1]

观察到由于我们只需要两个值,这两个值都来自于最后两行或者两列,所以我们可以只维护最后两行或者两列。更甚者是只维护一行或者一列(因为一个值只会被使用一次,所以可以立马替换为下一个值)。


Last update : May 28, 2023
Created : May 28, 2023