简单DP,以前做过,验证一下从上往下递推也是正确的。
#include <stdio.h>
#include <string.h>
#define N 105
int main()
{
int t, n, a[N][N], b[N][N];
while(~scanf("%d", &n))
{
for(int i = 0; i < n; i++)
{
for(int j = 0; j <= i; j++)
{
scanf("%d", &a[i][j]);
b[i][j] = a[i][j];
}
}
for(int i = 0; i < n - 1; i++)
{
for(int j = 0; j <= i; j++)
{
if(b[i][j] + a[i + 1][j] > b[i + 1][j])
b[i + 1][j] = b[i][j] + a[i + 1][j];
if(b[i][j] + a[i + 1][j + 1] > b[i + 1][j + 1])
b[i + 1][j + 1] = b[i][j] + a[i + 1][j + 1];
}
}
int ans = 0;
for(int i = 0; i < n; i++)
{
if(b[n - 1][i] > ans) ans = b[n - 1][i];
}
printf("%d\n", ans);
}
return 0;
}