数塔
数塔就是由一堆数字组成的塔状结构,其中第一行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<bits/stdc++.h>
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<<getmax(1,1)<<endl;
}