n = int(input()) grid = [] for i in range(n): row = list(map(int, input().split())) grid.append(row) dp = [[0] * n for _ in range(n)] dp[0][0] = grid[0][0] for i in range(1, n): dp[0][i] = dp[0][i-1] + grid[0][i] dp[i][0] = dp[i-1][0] + grid[i][0] for i in range(1, n): for j in range(1, n): dp[i][j] = max(dp[i-1][j], dp[i][j-1]) + grid[i][j] print(dp[n-1][n-1])的优化改进
时间: 2023-07-24 18:25:17 浏览: 154
这段代码是一个动态规划算法,用于求解一个二维网格中从左上角到右下角的最大路径和。可以通过以下几种方式优化改进:
1. 优化空间复杂度:由于每次计算 dp[i][j] 只用到了上一行的 dp[i-1][j] 和当前行的 dp[i][j-1],所以可以将 dp 数组压缩为一维数组,只保存当前行和上一行的结果即可。
2. 优化时间复杂度:由于当前计算 dp[i][j] 时只用到了 dp[i-1][j] 和 dp[i][j-1],所以可以在内层循环中,将这两个值提前计算好,避免重复计算。
优化后的代码如下:
```
n = int(input())
grid = []
for i in range(n):
row = list(map(int, input().split()))
grid.append(row)
dp = [0] * n
dp[0] = grid[0][0]
for i in range(1, n):
dp[i] = dp[i-1] + grid[0][i]
for i in range(1, n):
left = dp[0]
for j in range(n):
if j == 0:
dp[j] = dp[j] + grid[i][j]
else:
top = dp[j]
dp[j] = max(left, dp[j]) + grid[i][j]
left = top
print(dp[n-1])
```
阅读全文