图片1.png (1)在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。
时间: 2024-03-06 15:50:01 浏览: 116
这是一个经典的动态规划问题。可以使用一个二维数组dp[i][j]来记录从顶部走到(i,j)的最大和。则状态转移方程为:
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]
其中triangle[i][j]表示数字三角形中第i行第j列的数字。
最终的结果就是dp[n-1][k],其中n为数字三角形的行数,k为最后一行路径上数字和最大的列数。
具体实现可以参考下面的Python代码:
```python
triangle = [[7],
[3, 8],
[8, 1, 0],
[2, 7, 4, 4],
[4, 5, 2, 6, 5]]
n = len(triangle)
dp = [[0] * n for _ in range(n)]
dp[0][0] = triangle[0][0]
for i in range(1, n):
for j in range(i+1):
if j == 0:
dp[i][j] = dp[i-1][j] + triangle[i][j]
elif j == i:
dp[i][j] = dp[i-1][j-1] + triangle[i][j]
else:
dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]
print(max(dp[n-1]))
```
输出结果为:30,即最大数字和为30。
阅读全文