/*
http://acm.hdu.edu.cn/showproblem.php?pid=2084
动态规划:
使用二维数组来表示 数字
从底开始网上推,在最底的那一行,每个位置的最大值就是那个位置的值
倒数第二行,每个位置的最大值 是 那个位置的 值 加上 最后一行 相邻的 位置 中 最大的那个值,
....
一直到第一行,则第一行的最大值就是第一行的值 加上 第二行的 最大值
*/
#include <stdio.h>
#include <string.h>
int num[110][110];
int main()
{
int cas;
scanf("%d",&cas);
while(cas--)
{
memset(num,0,sizeof(num));
int n;
scanf("%d",&n);
int i;
for(i=1; i<=n; i++)
{
int j;
for(j=0; j<i; j++)
scanf("%d",&num[i][j]);
}
for(i=n; i>0; i--)
{
int k;
for(k=0; k<i; k++)
{
if(num[i+1][k] > num[i+1][k+1])
num[i][k] += num[i+1][k];
else
num[i][k] += num[i+1][k+1];
}
}
printf("%d\n",num[1][0]);
}
return 0;
}
2084 数塔
最新推荐文章于 2024-03-16 12:35:30 发布