在上面的数字三角形中寻找一条从顶部到底边的路径,使得路径上所经过的数字之和最大。路径上的每一步都只能往左下或 右下走。只需要求出这个最大和即可,不必给出具体路径。 三角形的行数大于1小于等于100,数字为 0 - 99
输入格式:
5 //表示三角形的行数 接下来输入三角形
7
3 8
8 1 0
2 7 4 4
4 5 2 6 5
要求输出最大和
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, ans = 0;
cin >> n;
vector<vector<int> > v(n,vector<int>(n,0));
for (int i = 0; i < n; i++) {
for (int j = 0; j < i+1; j++) {
cin >> v[i][j];
}
}
for (int i = 1; i < n; i++) {
for (int j = 0; j < i+1; j++) {
if (j == 0) {
v[i][j] += v[i-1][j];
}
else if (j == i) {
v[i][j] += v[i-1][j-1];
}
else {
v[i][j] += max(v[i-1][j-1],v[i-1][j]);
}
}
}
for (int j = 0; j < n; j++) {
ans = max(ans,v[n-1][j]);
}
/*for (int i = 0; i < n; i++) {
for (int j = 0; j < i+1; j++) {
cout << v[i][j];
}
cout << endl;
}*/
cout << ans << endl;
return 0;
}