问题描述
从数塔的顶层出发,寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或右下走。只需要求出这个最大和即可,不必给出具体路径。
三角形的行数为1-100,数字为0-99。
样例输入:
5
8
12 15
3 9 6
8 10 5 12
16 4 18 10 9
样例输出:
60
解法一:递归
思路分析:
- 用二维数组data来存放输入的三角形数塔,data[i][j]表示第i行第j列的数字的值;
- 用二维数组maxSum来表示节点子树塔路径和的最大值
- 从第二层开始递归,直到到达最低层,最后输出最大路径和maxSum[1][1];
C++代码如下,测试通过:
#include<iostream>
#include<algorithm>
#define MAX 101
using namespace std;
int data[MAX][MAX];
int num;
//递归函数
int maxSum(int i,int j){
int data_one;
int data_two;
int sum;