描述
图示是一个数字三角形,请编写一个程序计算从顶层到底层的某处的一条路径,使该路径经过的数字总和最大,并输出总和。
注:一步可沿左斜线向下或右斜线向下走;
输入描述
第一行是一个整数n,接来下是n行数字塔主体,数字塔的第k行有k个数字。
输出描述
一行,一个整数,即路径数字和的最大值。
样例输入 1
5 7 3 8 8 1 0 2 7 4 4 4 5 2 6 5
样例输出 1
30
提示
数据规模与约定
对于全部的测试点,保证 1≤n≤100,数塔元素均在100以内。
#include <bits/stdc++.h>
using namespace std;
int a[100][100];
int f[100][100];
int p[100][100];
int main() {
int n;
cin>>n;
for (int i = 0; i < n; i++) {
for (int j = 0; j <= i; j++) {
cin>>a[i][j];
}
}
for (int j = 0; j < n; j++) {
f[n-1][j] = a[n-1][j];
p[n-1][j] = -1;
}
for (int i = n-2; i >= 0; i--) {
for (int j = 0; j <= i; j++) {
if (f[i+1][j] > f[i+1][j+1]) {
f[i][j] = f[i+1][j] + a[i][j];
p[i][j] = 0;
} else {
f[i][j] = f[i+1][j+1] + a[i][j];
p[i][j] = 1;
}
}
}
cout<< f[0][0];
return 0;
}