这题是一个基础动态规划,入门题目,思路很简单,就是从下往上找一条最优路径即可,转移公式也很简单,就是挑最大的情况进行存储。
这里博主使用了最基础的二维数组来处理这题,其实这题还可以用一维滚动数组来优化空间,但是鉴于二维数组比较好理解,所以这里我就使用了二维数组处理。
#include
int a[110][110];
int max(int a, int b)
{
if (a > b)
return a;
return b;
}
int main()
{
int n, m;
scanf("%d", &n);
while (n)
{
scanf("%d", &m);
int i, j;
for (i = 0;i < m;i++)
{
for (j = 0;j <= i;j++)
{
scanf("%d", &a[i][j]);
}
}
for (i = m - 1;i >= 0;i--)
{
for (j = 0;j <= i;j++)
{
a[i][j] += max(a[i + 1][j], a[i + 1][j + 1]);
}
}
printf("%d\n", a[0][0]);
n--;
}
return 0;
}