给你一个n,然后使其成为一个n层的金字塔,其中金字塔上面一个数字比他下面两个数字小你的任务就是从最上面开始往下走,只能向下走相邻的两个数字从第一层走到最下面一层,求出其最大值。
输入样例:
5
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
输出样例:
30;
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int num[100][100] = { 0 };
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cin >> num[i][j];
}
}
for (int i = 1; i < n; i++) {
for (int j = 0; j <= i; j++) {
if (j == 0) {
num[i][j] += num[i - 1][j];
}
else if (j == i) {
num[i][j] += num[i - 1][j - 1];
}
else {
if (num[i - 1][j - 1] > num[i - 1][j])
num[i][j] += num[i - 1][j - 1];
else
num[i][j] += num[i - 1][j];
}
}
}
int min = num[n - 1][0];
for (int i = 0; i <= n; i++) {
if (num[n - 1][i] > min)
min = num[n - 1][i];
}
cout << min << endl;
return 0;
}