代码及解释
#include <algorithm>
#include <cstring>
#include <iostream>
// 数字三角形
// 感觉是最好理解的 DP
// A 完之后想起来可以用滚动数组压缩
//
// O
// |\
// O O
// |\|\
// O O O
//
//
int orig[105][105];
int f[105];
int main() {
int T;
std::cin >> T;
while (T--) {
int n;
std::cin >> n;
for (int i = 1; i <= n; i++)
for (int j = 1; j <= i; j++)
std::cin >> orig[i][j];
for (int i = 1; i <= n; i++)
f[i] = orig[n][i];
for (int i = n - 1; i >= 1; i--)
for (int j = 1; j <= i; j++)
f[j] = orig[i][j] + std::max(f[j], f[j + 1]);
std::cout << f[1] << std::endl;
}
return 0;
}