问题描述
在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。
三角形的行数大于1小于等于100,数字为 0 - 99
输入格式:
5 //三角形行数。下面是三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
要求输出最大和
Sample Output
30
整体思路仍然是递推求解。
用D( r, j) 来表示第r行第 j 个数字(r,j从1开始算)
用maxSum(r, j)表示从D(r,j)到底边的各条路径中,最佳路径的数字之和。maxSum(n,j)==D(n,j)本身。
因此,此题的最终问题就变成了求 MaxSum(0,0),从(0,0)往下递归地找到(n,0),再通过类似树形结构向上递推获得每一层不同节点的maxSum(r, j)
D(r, j)出发,下一步只能走D(r+1,j)或者D(r+1, j+1)。推出下式
if ( r == N)
maxSum(r,j) = D(r,j)
else
maxSum( r, j) = Max{ maxSum(r+1,j), maxSum(r+1,j+1) } + D(r,j)
由此推出最简单的解决方案