题目
2.思路:
这题可以用dp来写。求从第一行走到最后一行最大路径数字和,我们可以从后面开始计算,在倒数第二行开始,计算每一个值走的路径的最大值,然后赋值成能走的路径的最大值,就是这一行到下一行的最大路径数字之和,如此循环。动态转移方程:
a[i][j]=a[i][j]+max(a[i+1][j],a[i+1][j+1]);这样一直算到第一行,就是最大的路径数字和。感觉说不清楚,直接上代码。
3.代码
#include <iostream>
using namespace std;
int n, a[505][505];
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 = 1; j <= i; j++) {
a[i][j] = a[i][j] + max(a[i + 1][j], a[i + 1][j + 1]);
}
}
cout << a[1][1];
return 0;
}