Bootstrap

数塔问题C语言实现

设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,如图所示:

       若要求从根结点开始,请找出一条路径,使路径之和最大,只要输出路径的和。
 

输入

第一行为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;
}

 

;