本文共 942 字,大约阅读时间需要 3 分钟。
为了解决这个问题,我们需要找到从三角形顶端到底端的路径,使得路径上的数字之和最大。每一步只能向左下方或右下方移动。我们可以使用动态规划来解决这个问题。
dp 来记录到达每个位置时的最大和。dp[i][j] 表示从顶端走到第 i 行第 j 个位置时的最大和。dp 数组。对于每个位置 (i, j),其值为当前位置的数字加上下方左边和右边的较大值。n = int(input())num = []for i in range(n): row = list(map(int, input().split())) num.append(row)dp = []for i in range(n): dp.append([0] * (i + 1))for i in range(n-2, -1, -1): for j in range(i + 1): if j + 1 < len(dp[i+1]): left = dp[i+1][j] right = dp[i+1][j+1] dp[i][j] = num[i][j] + max(left, right) else: dp[i][j] = num[i][j] + dp[i+1][j]max_sum = max(dp[-1])print(max_sum)
n,然后读取每一行的数字并存储在 num 数组中。dp 数组:dp 数组的大小与 num 相同,用于记录每个位置的最大和。dp 数组:从最后一行开始向上填充,计算每个位置的最大和。对于每个位置 (i, j),其值为当前位置的数字加上下方左边和右边的较大值。dp 数组中找到最大值作为结果。通过这种方法,我们可以高效地找到路径上的最大数字之和。
转载地址:http://rkxfk.baihongyu.com/