这题思路就是从倒数第二层往上推,因为这题只能从相邻走,所以只有两种选择,同样也有一个状态转移方程:
a[i][j] += max(a[i+1][j],a[i+1][j+1])
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
const int maxn=105;
int a[maxn][maxn];
int c,n;
int main()
{
int i,j;
scanf("%d",&c);
while(c--)
{
scanf("%d",&n);
for(i=0; i<n; i++)
{
for(j=0; j<=i; j++)
{
scanf("%d",&a[i][j]);
}
}
for(i=n-2; i>=0; i--)
{
for(j=0; j<=i; j++)
{
a[i][j]+=(a[i+1][j]>a[i+1][j+1] ? a[i+1][j] : a[i+1][j+1]);
}
}
printf("%d\n",a[0][0]);
}
return 0;
}