5.Number Triangle
http://acm.fzu.edu.cn/problem.php?pid=1004
自底向上地解决,从倒数第二行开始,每个数字用其本身和其左右子节点中较大值的和来替代。
# 动态规划
import sys
line_left=0 # 每个用例剩余未读取行数
while true:
read_in=sys.stdin.readline()
if not read_in:
break
if line_left==0:
line_left=read_in
line_left=int(count.rstrip())
triangle=[] # 初始化数字三角形
else:
line=read_in
triangle.append([int(x) for x in line.rstrip().split(' ')])
line_left-=1 # 每个用例未读取行数减少一行
if line_left==0: # 若该用例所有行都被读取,开始计算最大值路径
line_at=len(triangle)-2 # 程序处理当前所在行
while line_at>=0:
for i in range(0,len(triangle[line_at])):
left=triangle[line_at+1][i]
right=triangle[line_at+1][i+1]
if left>right:
triangle[line_at][i]+=left
else:
triangle[line_at][i]+=right
line_at-=1
print(triangle[0][0])