每次找相邻的点的中的max,计入dp中就可以了
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
#include <stack>
#include <queue>
#include <list>
#include <cmath>
using namespace std;
#define cir(a,b) memset(a,b,sizeof a)
typedef long long LL;
const int maxn = 10000+10;
const int INF = 1e9+10;
int T;
int n;
int s[100+10][100+10];
int dp[105][105];
int main()
{
cin >> T;
while(T--)
{
cin >> n;
for(int i=1; i<=n; i++)
{
for(int j=1; j<=i; j++)
{
cin >> s[i][j];
}
}
for(int i=1; i<=n; i++) dp[n][i] = s[n][i];
for(int i=n-1; i>=1; i--)
{
for(int j=1; j<=i; j++)
{
dp[i][j] = max(dp[i+1][j]+ s[i][j],dp[i+1][j+1]+ s[i][j]) ;
// cout << dp[i][j] <<" ";
}
//cout << endl;
}
cout << dp[1][1] << endl;
}
}