题目描述
给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Copy
输入格式
第一行包含整数 �n,表示数字三角形的层数。
接下来 �n行,每行包含若干整数,其中第 �i 行表示数字三角形第 �i 层包含的整数。
输出格式
输出一个整数,表示最大的路径数字和。
样例
输入数据 1
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
Copy
输出数据 1
30
Copy
数据范围
1≤�≤5001≤n≤500
−10000≤三角形中的整数≤10000−10000≤三角形中的整数≤10000
#include <bits/stdc++.h>
using namespace std;
int a[508][508];//存储各数字
int n;
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 - 1; i >= 1; i--) {
for (int j = i; j >= 1; j--) { //从下往上遍历
a[i][j] = max(a[i + 1][j], a[i + 1][j + 1]) + a[i][j];//将a[i][j]处的值转化
}
}
cout << a[1][1] << endl;
return 0;
}