题目名称:数塔问题 题目描述: 图示是一个数字三角形,请编写一个程序计算从顶层到底层 的某处的一条路径,使该路径经过的数字总和最小,并输出总和。 注:(1)一步可沿左斜线向下或右斜线向下走; (2)三角形中的数字取值为 0,1,2…99.。 输入:n+1 行,第一行是一个整数 n,接来下是 n 行数字塔主体,数字 塔的第 k 行有 k 个数字。(1<=n<=100) 输出:一行,一个整数,即路径数字和的最小值。 样例输入: 5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5 样例输出: 17
时间: 2024-04-17 19:26:46 浏览: 106
数字三角形问题程序算法
4星 · 用户满意度95%
这是一个典型的动态规划问题,可以使用递推的方式解决。下面是一个可能的解法:
```python
def calculate_min_path(triangle):
n = len(triangle)
# 创建一个二维数组来保存最小路径和
dp = [[0] * n for _ in range(n)]
# 将最底层的数字塔复制到 dp 数组中
for i in range(n):
dp[n-1][i] = triangle[n-1][i]
# 从倒数第二层开始逐层向上计算最小路径和
for i in range(n-2, -1, -1):
for j in range(i+1):
# 取当前位置左下方和右下方的最小路径和,加上当前位置的值
dp[i][j] = triangle[i][j] + min(dp[i+1][j], dp[i+1][j+1])
# 返回最小路径和
return dp[0][0]
# 样例输入
triangle = [
[7],
[3, 8],
[8, 1, 0],
[2, 7, 4, 4],
[4, 5, 2, 6, 5]
]
# 计算最小路径和
min_path_sum = calculate_min_path(triangle)
# 输出结果
print(min_path_sum)
```
运行以上代码,输出结果为:
```
17
```
这表示从顶层到底层的某处的一条路径,使该路径经过的数字总和最小为 17。
阅读全文