刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

最佳路径
如下所示的由正整数数字构成的三角形:
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。
注意:路径上的每一步只能从一个数走到下一层上和它最近的下边(正下方)的数或者右边(右下方)的数。
时间限制:1000
内存限制:65536
输入
第一行为三角形高度100>=h>=1,同时也是最底层边的数字的数目。 从第二行开始,每行为三角形相应行的数字,中间用空格分隔。
输出
最佳路径的长度数值。
样例输入

5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5

样例输出

30

提示
如何采用动态规划的思想,对问题进行分解。

使用微信搜索喵呜刷题,轻松应对考试!

答案:

解析:

【喵呜刷题小喵解析】本题可以使用动态规划来解决。首先,我们定义一个二维数组dp,其中dp[i][j]表示从三角形的顶部到第i行第j个数字的路径上的最大和。然后,我们遍历三角形的每一行,对于每个数字,我们有两种选择:1. 从上一行的左边走到当前数字,即dp[i-1][j-1] + triangle[i][j]2. 从上一行的右边走到当前数字,即dp[i-1][j] + triangle[i][j]我们选择两种选择中的最大值作为dp[i][j]的值。最后,返回dp[n-1][n-1],其中n为三角形的高度,即为最佳路径上的数字之和。在Python中,我们可以使用以下代码实现:```pythondef max_path_sum(triangle):n = len(triangle)dp = [[0] * (n + 1) for _ in range(n)]for i in range(n):for j in range(i + 1):if j == 0:dp[i][j] = triangle[i][j]else:dp[i][j] = triangle[i][j] + max(dp[i - 1][j - 1], dp[i - 1][j])return dp[n - 1][n - 1]n = int(input())triangle = []for _ in range(n):triangle.append(list(map(int, input().split())))print(max_path_sum(triangle))```其中,我们首先将输入的三角形存储在一个二维列表中,然后使用动态规划计算出最佳路径上的数字之和。最后,输出计算的结果即可。
创作类型:
原创

本文链接:最佳路径 如下所示的由正整数数字构成的三角形: 7 3 8 8 1 0 2 7 4 4 4 5 2

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share