题目描述
数塔就是由一堆数字组成的塔状结构,其中第一行1个数,第二行2个数,第三行3个数,依此类推。每个数都与下一层的左下与右下两个数相连接。这样从塔顶到塔底就可以有很多条路径可以走,现在需要求路径上的数字之和的最大值。
例如在上图中,5->8->12->10与5->3->16->11这两条路径上的数字之和都是35,是所有路径中的最大值。
输入描述
第一行一个正整数n(1≤n≤20),表示数塔的层数。
接下来n行为数塔从上到下的每一层,其中第i层有i个正整数,每个数都不超过1000。
输出描述
从塔顶到塔底的所有路径中路径上数字之和的最大值。
样例1
输入
4 5 8 3 12 7 16 4 10 11 6
输出
35
代码:
#include<iostream>
using namespace std;
int num[21][21];
int n;
int fun(int i,int j){
if(i==n) return num[n][j]; //出口
else{
return max(fun(i+1,j),fun(i+1,j+1))+num[i][j];
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
for(int j=1;j<=i;j++){
cin>>num[i][j];
}
}
cout<<fun(1,1)<<endl;
return 0;
}