题目描述
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输入格式
第一行包含整数 nn,表示数字三角形的层数。
接下来 nn行,每行包含若干整数,其中第 ii 行表示数字三角形第 ii 层包含的整数。
输出格式
输出一个整数,表示最大的路径数字和。
样例
Sample Input 1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Sample Output 1
30
数据范围
1≤n≤5001≤n≤500
−10000<=三角形中的整数<=10000
源码:
#include <bits/stdc++.h>
using namespace std;
int n, a[10100][10100];
int main() {
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[i][j] << " "; 数据跟踪
}
// cout << endl; 数据跟踪
}
cout << a[1][1];
return 0;
}
使用数据跟踪整个过程得结果如图:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
4 5 2 6 5
7 12 10 10
20 13 10
23 21
30
30 //答案
可根据所得数据理解整个过程。