这是一个典型的动态规划问题,我们用$a(i,j)$表示该三角形中第i行第j列元素,再用$d(i,j)$表示从顶点到第i行第j列元素的最大路径和,那么显然对每行第一列和最后一列的元素而言,路径只有一条,对其他元素则有
$$d(i,j)=\max\{d(i-1,j-1),d(i-1,j)\}+a(i,j)$$
递推并取最后一行的最大值即得结果 $1074$。
T=[[...]] #将三角形保存在二维列表中,数据太长,此处略去
maxPath=[[75]]
for row in T[1:]:
maxPath.append([maxPath[-1][0]+row[0]])
for col,val in enumerate(row[1:-1]):
maxPath[-1].append(val+max(maxPath[-2][col],maxPath[-2][col+1]))
maxPath[-1].append(row[-1]+maxPath[-2][-1])
print max(maxPath[-1])
|