这个题,我们读入之后,就按照递归的反方向dp就可以了,我们逐层推回原点。
#include <iostream>
#include <cmath>
using namespace std;
int num[105][105];
int main()
{
ios::sync_with_stdio(false);
int c, n;
scanf("%d", &c);
while (c--) {
scanf("%d",&n);
for (int i = 0; i < n;i++) {
for (int j = 0; j <= i;j++) {
scanf("%d",&num[i][j]);
}
}
// for (int i = 0; i < n;i++) {
// for (int j = 0; j <= i;j++) {
// printf("%d", num[i][j]);
// }
// printf("
");
// }
for (int i = n-2; i >= 0;i--) {
for (int j = i; j >= 0;j--) {
num[i][j] = max(num[i + 1][j], num[i + 1][j + 1]) + num[i][j];
}
}
printf("%d
", num[0][0]);
}
return 0;
}