数塔-递归

2025-10-28 21:10:04

数塔

数塔就是由一堆数字组成的塔状结构,其中第一行1个数,第二行2个数,第三行3个数,依此类推。每个数都与下一层的左下与右下两个数相连接。这样从塔顶到塔底就可以有很多条路径可以走,现在需要求路径上的数字之和的最大值。

例如在上图中,5->8->12->10与5->3->16->11这两条路径上的数字之和都是35,是所有路径中的最大值。

输入描述

第一行一个正整数(1<=n<=20),表示数塔的层数。

接下来n行为数塔从上到下的每一层,其中第i层有i个正整数,每个数都不超过1000。

输出描述

从塔顶到塔底的所有路径中路径上数字之和的最大值。

样例1

输入

4

5

8 3

12 7 16

4 10 11 6

输出

35

**思路:**递归求解

#include

using namespace std;

int a[20][20];

int n;

int getmax(int x,int y){

if(x==n){

return a[x][y];

}

return max(getmax(x+1,y),getmax(x+1,y+1))+a[x][y];

}

int main(){

cin>>n;

for(int i=1;i<=n;i++){

for(int j=1;j<=i;j++){

cin>>a[i][j];

}

}

cout<

}