p.s.个人收录用
题目描述
设有一个三角形的数塔,顶点为根结点,每个结点有一个整数值。从顶点出发,可以向左走或向右走,如图所示:
若要求从根结点开始,请找出一条路径,使路径之和最大,只要输出路径的和。
输入
第一行为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
代码
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <math.h>
#include <string.h>
//数塔问题
int a[10][10] = { 0 };
int maxSum[10][10];
int n;
int max(int a, int b)
{
return (a > b ? a : b);
}
int sum(int i, int j)
{
if (maxSum[i][j] != -1)
return maxSum[i][j];
if (i == n)
return a[i][j];
maxSum[i][j] = max(sum(i + 1, j), sum(i + 1, j + 1)) + a[i][j];
return maxSum[i][j];
}
int main()
{
scanf("%d", &n);
for (int i = 0; i < n; i++)
{
for (int j = 0; j <= i; j++)
{
scanf("%d", &a[i][j]);
maxSum[i][j] = -1;
}
}
printf("%d\n", sum(0, 0));
}