【题目来源】: TYVJ 1079
【题目链接】:点击打开链接
【解题思路】:
我的是既然必然经过一点,那我就从这点为分界,先从顶递推至此点所在行,再从底递推至此点所在行,两次的结果累加在此点上,即为所得结果
【A C代码】:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
using namespace std;
#define maxn 30
int arr[maxn][maxn];
int main()
{
int n, i, j, x, y;
while(~scanf("%d", &n))
{
memset(arr, 0, sizeof(arr));
for(i = 1; i <= n; i++)
{
for(j = 1; j <= i; j++)
scanf("%d", &arr[i][j]);
}
x = n / 2;
y = n / 2;
for(i = n; i > x; i--)
{
for(j=1; j <= i; j++)
{
arr[i-1][j] += max(arr[i][j], arr[i][j+1]);
}
}
for(i = 1; i < x; i++)
{
for(j=1; j <= i+1; j++)
{
arr[i+1][j] += max(arr[i][j-1], arr[i][j]);
}
}
printf("%d\n", arr[x][y]);
}
return 0;
}