数学三角形
(1)问题描述
给定一个具有N层的数字三角形,从顶至底有多条路径,每一步可沿左斜线向下或沿右斜线向下,路径所经过的数字之和为路径得分,请求出最大路径得分。
(2)解题思路
为使三角形更方便输入,三角形每行的输入位置相同,上面的三角形输入格式为:
原三角形中左下与右下的走法,用新的三角形输入后变为每一步可沿直线向下或右斜线向下走;
递归方法求解的基本思路:
D[i][j]表示数字三角形第i行第j个数字(i,j都从1开始),函数MaxSum(i,j)表示从第i行的第j个数字到底边的最佳路径上的数字之和;
题目要求的即为求:MaxSum(1,1);
从某个D(i,j)出发往下走,下一步只能走D(i+1,j)或是D(i+1,j+1),
如果走D(i+1,j),那么得到的MaxSum(i,j)就是MaxSum(i+1,j)+ D(i,j);
如果走D(i+1,j+1),那么得到的 MaxSum(i,j)就是
MaxSum(i+1,j+1)+ D(i,j)。
选择往哪里走,就看MaxSum(i+1,j)与MaxSum(i+1,j+1)哪一个更大。
递归函数:
int MaxSum(int i,int j)
{
if(i==N)
return D[i][j];
int nSum1=MaxSum(i+1,j);
int