【数字三角形】
【问题】从三角形的顶至底的一条路径,使该路径经过的数字总和最大
- 方法一:递归求解
【分析】:用二维数组存放数字三角形,D( x, y) : 第x行第 y 个数字(x,y从1 开始算) , MaxSum(x,y ) : 从D(x,y)到底边的各条路径中,最佳路径的数字之和。 求 MaxSum(1,1) ,D(x, y)出发,下一步只能走D(x+1,y)或者D(x+1,yj+1)。故对于N行的三角形:
//递归
#include <iostream>
#include <algorithm>
#define Max 101
using namespace std;
int D[Max][Max];
int num;
int MaxSum(int x, int y)
{
if(x == num) //当加到最后一行 递归结束
return D[x][y];
return max(MaxSum(x+1, y),MaxSum(x+1, y + 1))+ D[x][y]; //选取左孩子或者右孩子最大的那个
}
int main()
{
int i, j;
cin >> num;
for(i = 1; i <= num; i ++)
for(j = 1; j <= i; j ++)
cin >> D[i][j];
cout <<endl<< MaxSum(1,1) << endl;
r