📅  最后修改于: 2023-12-03 14:49:26.779000             🧑  作者: Mango
在给定的矩阵中,从左上角出发,只能向下或向右移动,最终到达矩阵右下角,并返回最大值。这是一种常见的动态规划问题。
假设我们有一个 m x n
的矩阵 matrix
,用 dp[i][j]
表示从 (0,0)
出发到达 (i,j)
并返回的最大值。
那么,我们可以根据 dp
数组的定义,得到递推公式:
dp[i][j] = matrix[i][j] + max(dp[i-1][j], dp[i][j-1])
其中,matrix[i][j]
表示当前位置的值,dp[i-1][j]
表示从上方到达 (i,j)
的最大值,dp[i][j-1]
表示从左方到达 (i,j)
的最大值。
最终的答案就是 dp[m-1][n-1]
。
这里给出一个 Python 的实现:
def max_path(matrix):
m, n = len(matrix), len(matrix[0])
dp = [[0] * n for _ in range(m)]
dp[0][0] = matrix[0][0]
for i in range(1, m):
dp[i][0] = dp[i-1][0] + matrix[i][0]
for j in range(1, n):
dp[0][j] = dp[0][j-1] + matrix[0][j]
for i in range(1, m):
for j in range(1, n):
dp[i][j] = matrix[i][j] + max(dp[i-1][j], dp[i][j-1])
return dp[m-1][n-1]
这个实现是比较基础的,时间复杂度为 $O(mn)$。在实际应用中,可能需要进行一些优化。