问题 E: 深入浅出学算法034-数塔问题

题目描述

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

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

输入

第一行为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
#include <stdio.h>

#define MAX_N 10

// 计算数塔最大路径和的函数
int max_path_sum(int triangle[MAX_N][MAX_N], int n) {
    // 从倒数第二层开始向上更新路径和
    for (int i = n - 2; i >= 0; i--) {
        for (int j = 0; j <= i; j++) {
            // 对于每个节点,选择从它开始向下走到底的路径中路径和最大的一条,并加上当前节点的值
            triangle[i][j] += triangle[i + 1][j] > triangle[i + 1][j + 1] ? triangle[i + 1][j] : triangle[i + 1][j + 1];
        }
    }
    // 最终结果保存在数塔的顶端节点
    return triangle[0][0];
}

int main() {
    int n;
    printf("请输入数塔的层数:");
    scanf("%d", &n);

    // 读取数塔数据
    int triangle[MAX_N][MAX_N];
    printf("请输入数塔的数据:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j <= i; j++) {
            scanf("%d", &triangle[i][j]);
        }
    }

    // 调用函数求解最大路径和
    int max_sum = max_path_sum(triangle, n);

    // 输出结果
    printf("路径和最大值为:%d\n", max_sum);

    return 0;
}

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值