📌  相关文章
📜  从矩阵左上角到右下角并返回的最大点(1)

📅  最后修改于: 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)$。在实际应用中,可能需要进行一些优化。