📅  最后修改于: 2023-12-03 15:12:39.461000             🧑  作者: Mango
本文介绍了 GATE MOCK 2017 考试中的第 13 道题目。该问题要求求出矩阵中最小路径的和,路径必须从左上角到右下角,每次只能向右或向下移动一个位置。
一个 $n \times m$ 的矩阵,每个位置上都有一个正整数 $a_{i,j}$。从左上角出发,每次只能向右或向下移动一个位置,最终到达右下角。求最小路径和。
这是一道动态规划问题。它可以使用一个二维数组 dp 存储每个位置的最小路径和。其中,$dp_{i,j}$ 表示从左上角到达 $(i,j)$ 的最小路径和。
状态转移方程为:
$$ dp_{i,j} = \min(dp_{i-1,j}, dp_{i,j-1}) + a_{i,j} $$
边界情况为:
$$ \begin{aligned} dp_{0,0} &= a_{0,0} \ dp_{0,j} &= dp_{0,j-1} + a_{0,j} \ dp_{i,0} &= dp_{i-1,0} + a_{i,0} \end{aligned} $$
最终答案为 $dp_{n-1,m-1}$。
def min_path_sum(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] = min(dp[i-1][j], dp[i][j-1]) + matrix[i][j]
return dp[-1][-1]
其中,matrix
是一个二维数组,表示输入矩阵。函数的返回值为最小路径和。