经典指数          
原因
2982
浏览数
0
收藏数
 

假设有如下所示的一个数字金字塔,现在,要求写一个程序来查找从顶点到底部任意处结束的路径,使路径经过的数字的和最大,并输出该路径的最大和。比如以下金字塔的和最大路径的和为7+3+8+7+5=30。 7 3 2 8 1 0 2 7 4 4 4 5 2 6 5

     举报   纠错  
 
切换
1 个答案

#include

#include

#include

using namespace std;

/************************************************************************/

/*vec存储数值

maxSum当前的最大值

sum走到当前路径的之和

i, j当前处于的位置

size数字的宽度与高度*/

/************************************************************************/

/************************************************************************/

/* 查找路径之和的最大值                                                                     */

/************************************************************************/

void getMaxSum(vector>& vec, int *maxSum, int sum, int i, int j, int size)

{

if (0 > i || i >= size || 0 > j || j > i)

return;

sum += vec[i][j];

(*maxSum) = max(*maxSum, sum);

getMaxSum(vec, maxSum, sum, i + 1, j, size);

getMaxSum(vec, maxSum, sum, i + 1, j + 1, size);

}

int main()

{

int size;

int maxSum;

vector> vec;

cin >> size;

for (int i = 1; i <= size; ++i)

{

vector v(i);

for (int j = 0; j < i; ++j)

cin >> v[j];

vec.push_back(v);

}

getMaxSum(vec, &maxSum, 0, 0, 0, size);

cout << maxSum << endl;

return 0;

}

 
切换
撰写答案