设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,如图所示:
若要求从根结点开始,请找出一条路径,使路径之和最大,只要输出路径的和。
输入
第一行为n(n<10),表示数塔的层数
从第2行至n+1行,每行有若干个数据,表示数塔中的数值。
输出
输出路径和最大的路径值。
样例输入 Copy
5
13
11 8
12 7 26
6 14 15 8
12 7 13 24 11
样例输出 Copy
86
思路链接:https://blog.csdn.net/ancientear/article/details/79170221
代码C语言实现:
#include <stdio.h>
long long MAX(long long a,long long b)
{
if (a>b)return a;
else return b;
}
void w(long long max[][20],int a[20][20],int n)
{
int i,j;
for (i=n;i>=1;i--){
for (j=1;j<=i;j++){
if (i==n)max[i][j]=a[i][j];
else {
max[i][j]=MAX(max[i+1][j],max[i+1][j+1])+a[i][j];
}
}
}
}
int main()
{
int n,i,j;
int a[20][20];
long long max[20][20];
scanf("%d",&n);
for (i=1;i<=n;i++){
for (j=1;j<=i;j++){
scanf("%d",&a[i][j]);
}
}
w(max,a,n);
printf("%lld\n",max[1][1]);
return 0;
}