查看: 978|回复: 0

[C/C++] 1288:三角形最佳路径问题

[复制链接]

1

技术

25

魅力

7

原创

管理员

Rank: 9Rank: 9Rank: 9

积分
11343
人气
297
分享
42

论坛元老优秀版主活跃会员最佳新人灌水之王

发表于 2021-9-30 12:48:50 | 显示全部楼层 |阅读模式
1288:三角形最佳路径问题

时间限制: 1000 ms         内存限制: 65536 KB
提交数: 4829     通过数: 4144
【题目描述】
如下所示的由正整数数字构成的三角形:

7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
从三角形的顶部到底部有很多条不同的路径。对于每条路径,把路径上面的数加起来可以得到一个和,和最大的路径称为最佳路径。你的任务就是求出最佳路径上的数字之和。

注意:路径上的每一步只能从一个数走到下一层上和它最近的下边(正下方)的数或者右边(右下方)的数。

【输入】
第一行为三角形高度100≥h≥1,同时也是最底层边的数字的数目。

从第二行开始,每行为三角形相应行的数字,中间用空格分隔。

【输出】
最佳路径的长度数值。

【输入样例】
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
【输出样例】
30

【代码】
[C++] 纯文本查看 复制代码
#include <iostream>
#include <cstdio>
#include <utility>
#include <cstring>
using namespace std;

int main() {
        int h, result = 0, data[105][105], a[105][105];
        scanf("%d", &h);
        memset(data, 0, sizeof(data));
        memset(a, 0, sizeof(a));
        for (int i = 0; i < h; i++) {
                for (int j = 0; j <= i; j++) {
                        scanf("%d", &data[i][j]);
                        a[i][j] = i == 0 ? data[i][j] : data[i][j] + (j == 0 ? a[i - 1][j] : max(a[i - 1][j], a[i - 1][j - 1]));
                }
        }
        for (int i = 0; i < h; i++) {
                result = max(result, a[h - 1][i]);
        }
        printf("%d", result);
        return 0;
}




Just do it.
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表