📜  三角形中的最小和路径(1)

📅  最后修改于: 2023-12-03 14:48:47.936000             🧑  作者: Mango

三角形中的最小和路径

简介

在给定的一个三角形中,找出一条从顶部到底部的路径,使得路径上的所有数字之和最小。每一步只能移动到下一行相邻数字上。

这个问题可以用动态规划算法来解决。我们可以从三角形的底部开始,自底向上地计算每个位置的最小和路径。最后,顶部的位置即为路径的起点,路径的最小和即为顶部位置的值。

动态规划算法
状态定义

我们用一个二维数组 dp 来表示每个位置的最小和路径。其中 dp[i][j] 表示第 i 行第 j 列位置的最小和路径。

状态转移方程

我们从底部开始,自底向上地计算每个位置的最小和路径。对于每个位置 (i, j),它的下一行相邻数字有两个,即 (i+1, j)(i+1, j+1)。我们选择其中最小的那个数字加上当前位置的数字作为 dp[i][j] 的值。

状态转移方程为:

dp[i][j] = min(dp[i+1][j], dp[i+1][j+1]) + triangle[i][j]
边界条件

最底层的路径即为最小路径。我们可以先将 dp 数组的最后一行初始化为三角形的最后一行。

最终结果

最终,路径的最小和即为 dp[0][0] 的值。

代码示例
def minimumTotal(triangle):
    rows = len(triangle)
    dp = triangle[-1]  # 初始化最后一行

    for i in range(rows-2, -1, -1):
        for j in range(i+1):
            dp[j] = min(dp[j], dp[j+1]) + triangle[i][j]

    return dp[0]


# 测试样例
triangle = [
     [2],
    [3,4],
   [6,5,7],
  [4,1,8,3]
]
result = minimumTotal(triangle)
print(f"The minimum total of the path is {result}.")

该代码实现了给定一个示例三角形后,计算出路径的最小和。

注意:此处为 Python 代码示例,你也可以使用其他编程语言去实现相同的逻辑。

总结

通过动态规划算法,我们可以高效地解决三角形中的最小和路径问题。该问题经常在算法和动态规划相关的面试题中出现。熟练掌握该算法可以提高程序员的编程技能和面试竞争力。