#include <iostream>
using namespace std;
int main() {
int n, temp;
cin >> n;
int b[510][510] = {0};//数组b[i][j]存从第一位数到第(i,j)位的最大路径
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= i; j++) {
cin >> temp;//输入临时变量
if (j >1&&j<i)
b[i][j] = max(b[i - 1][j] , b[i - 1][j - 1] )+temp;//选择正上方和左上方中最大的路径,再加上自身的数后为该位置的最大路径
else if (j == 1)
b[i][j] = b[i - 1][j] + temp;//j=1时,只有从正上方才能走到该位置
else if (j == i)
b[i][j] = b[i - 1][j - 1] + temp;//j=i时,只有从左上方才能走到该位置
}
}
for (int i = 1; i < n; i++) {
if (b[n][i] > b[n][i + 1])
swap(b[n][i], b[n][i + 1]);//对最后一排的数组b进行排序
}
cout << b[n][n];//输出最大值
return 0;
}
每日一题(数字三角形)
于 2023-03-23 00:08:46 首次发布