题目描述
上图给出了一个数字三角形。从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,你的任务就是找到最大的和。
路径上的每一步只能从一个数走到下一层和它最近的左边的那个数或者右 边的那个数。此外,向左下走的次数与向右下走的次数相差不能超过 1。
输入描述
输入的第一行包含一个整数 N (1 ≤ N ≤ 100),表示三角形的行数。
下面的 N 行给出数字三角形。数字三角形上的数都是 0 至 100 之间的整数。
输出描述
输出一个整数,表示答案。
输入输出样例
示例
输入:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出:
27
运行限制
最大运行时间:1s
最大运行内存: 256M文章来源:https://www.toymoban.com/news/detail-743354.html
num=int(input())
mapp=[]
for item in range(num):
data=list(map(int,input().split()))
mapp.append(data)
pass
dp=[[0 for i in range(0,j+1)]for j in range(num)]
for item in range(num):
for jtem in range(item+1):
if item==jtem==0:
dp[item][jtem]=mapp[0][0]
pass
if jtem==0:
dp[item][jtem]=mapp[item][jtem]+dp[item-1][jtem]
pass
elif jtem==item:
dp[item][jtem]=mapp[item][jtem]+dp[item-1][jtem-1]
pass
else:
dp[item][jtem]=max(mapp[item][jtem]+dp[item-1][jtem-1],mapp[item][jtem]+dp[item-1][jtem])
pass
pass
pass
if num%2==0:
anss=max(dp[num-1][(num)//2],dp[num-1][(num)//2-1])
pass
else:
anss=dp[num-1][(num)//2]
pass
print(anss)
题目中左右步数相差不超过一,则说明了最后的答案一定是处于中间的,//表示做除法后向下取整文章来源地址https://www.toymoban.com/news/detail-743354.html
到了这里,关于【数字三角形】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!