第一行输入两个整数 n 和 m,表示矩阵的大小。
接下来 n 行每行 m 个整数表示矩阵。
输出一个整数表示答案。
4 4 1 3 5 9 8 1 3 4 5 0 6 1 8 8 4 0
12
def shortestRoadSum(arr, n, m): #生成n行m列的0矩阵dp dp = [[0 for i in range(m)] for j in range(n)] dp[0][0] = arr[0][0] for i in range(1, n): #第一列只能由上向下走 dp[i][0] = dp[i-1][0] + arr[i][0] for j in range(1, m): #第一行只能由左向右走 dp[0][j] = dp[0][j-1] + arr[0][j] for i in range(1, n): for j in range(1, m): dp[i][j] = min(dp[i-1][j], dp[i][j-1]) + arr[i][j] return dp[n-1][m-1] n, m = map(int, input().split()) #输入二维矩阵 arr = [] for i in range(n): arr.append(list(map(int, input().split()))) print(shortestRoadSum(arr, n, m))
def shortestPathSum(arr, n, m): #直接修改arr for i in range(1, n): #第一列只能由上向下走 arr[i][0] = arr[i-1][0] + arr[i][0] for j in range(1, m): #第一行只能由左向右走 arr[0][j] = arr[0][j-1] + arr[0][j] for i in range(1, n): for j in range(1, m): arr[i][j] = min(arr[i-1][j], arr[i][j-1]) + arr[i][j] return arr[n-1][m-1] n, m = map(int, input().split()) arr = [] for i in range(n): arr.append(list(map(int, input().split()))) print(shortestPathSum(arr, n, m))牛客的是否ac可能和网速和服务器有关,不稳定,同时python与其他语言比起来,运行时间确实算长的,毕竟是解释型语言,感觉每次都走在超时的边缘
def shortestRoadSum(arr, n, m): # 每次只保留一行结果 dp = arr[0] # 更新第一行的结果 for j in range(1, m): # 第一行只能由左向右走 dp[j] += dp[j - 1] for i in range(1, n): dp[0] += arr[i][0] #每一行开始遍历时更新第一个元素 for j in range(1, m): dp[j] = min(dp[j-1],dp[j]) + arr[i][j] return dp[-1] n, m = map(int, input().split()) # 输入二维矩阵 arr = [] for i in range(n): arr.append(list(map(int, input().split()))) print(shortestRoadSum(arr, n, m))使用一维矩阵来保存每一行的最优结果,想明白的感觉真好