這題是一個基礎動態規劃,入門題目,思路很簡單,就是從下往上找一條最優路徑即可,轉移公式也很簡單,就是挑最大的情況進行存儲。
這裏博主使用了最基礎的二維數組來處理這題,其實這題還可以用一維滾動數組來優化空間,但是鑑於二維數組比較好理解,所以這裏我就使用了二維數組處理。
#include<stdio.h>
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;
}