题目描述
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输入格式
第一行包含整数 �n,表示数字三角形的层数。
接下来 �n行,每行包含若干整数,其中第 �i 行表示数字三角形第 �i 层包含的整数。
输出格式
输出一个整数,表示最大的路径数字和。
样例
输入数据 1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出数据 1
30
数据范围
1≤�≤5001≤n≤500
−10000≤三角形中的整数≤10000−10000≤三角形中的整数≤10000
解题思路:
创建一个二维数组以存放这个数字三角形,要想得到最大的路径数字和,我们应该由最后一行开始,向上每一次都选择所得的数最大的路径,将这些路径相加,即可得最大路径和。
代码:
#include <bits/stdc++.h>
using namespace std;
int a[10000][10000];
int main() {
int n;
cin >> n;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> a[i][j];
}
}
for (int i = n; i >= 1; i--) {
for (int j = 1; j <= i; j++) {
a[i][j] += max(a[i + 1][j], a[i + 1][j + 1]);
}
}
cout << a[1][1];
return 0;
}