动态规划
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
int ** sum = new int*[n];
sum[0] = new int;
cin >> sum[0][0];
for (int i = 1; i < n; i++) {
sum[i] = new int[i+1];
for (int j = 0; j < i+1; j++) {
int now;
cin >> now;
if (j == i) {
sum[i][j] = sum[i-1][j-1] + now;
} else if (j == 0) {
sum[i][j] = sum[i-1][j] + now;
} else {
sum[i][j] = max(sum[i-1][j], sum[i-1][j-1]) + now;
}
}
}
int ans = 0;
for (int i = 0; i < n; i++) {
if (ans < sum[n-1][i])
ans = sum[n-1][i];
}
cout << ans << endl;
return 0;
}
本文介绍了一个使用动态规划算法解决的问题:在一个形如三角形的数列中找到从顶部到底部的最大路径和。通过逐步迭代计算每个节点到当前层的最大路径和,最终找出最大值。

388

被折叠的 条评论
为什么被折叠?



