和我一周之前所做的题目很相似,这个是一道简单的dp问题
想知道从第N行到最后一行的最大sum,就得知道从n-1行到最后一行的最大sum值,这样下来就是一个逆推的过程
从最后一行开始求,一行一行往上求,直到第一行,但是刚开始需要把sum这个数组的值全部赋成数塔的最后一行的值
#include<stdio.h>
const int MAX=101;
int max(int c,int d)
{
return c>d?c:d;
}
int main()
{
int n,a[MAX][MAX],sum[MAX],x;
scanf("%d",&x);
while(x--)
{
scanf("%d",&n);
for(int i=0;i<n;i++)
for(int j=0;j<=i;j++)
{
scanf("%d",&a[i][j]);
}
for(int j=0;j<n;j++)
sum[j]=a[n-1][j];
for(int i=n-2;i>=0;i--)
for(int j=0;j<=i;j++)
{
sum[j]=max(sum[j],sum[j+1])+a[i][j];
}
printf("%d\n",sum[0]);
}
return 0;
}