【题目来源】: TYVJ 1044
【题目链接】:点击打开链接
【解题思路】:
最基础的动态规划,采用自底向上递,每个结点对应一个状态,取从最底下到达当前层该结点的路径最小路径之和为该结点状态,则可递推出状态转移方程:
dp[i][j] = arr[i+1][j] + max(dp[i+1][j], dp[i+1][j+1]);
【A C代码】:
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
#define maxn 30
int arr[maxn][maxn];
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int n, i, j;
while(~scanf("%d", &n))
{
for(i = 1; i <= n; i++)
{
for(j = 1; j <= i; j++)
scanf("%d", &arr[i][j]);
}
for(i = n; i > 1; i--)
{
for(j=1; j < i; j++)
{
arr[i-1][j] += max(arr[i][j], arr[i][j+1]);
}
}
printf("%d\n", arr[1][1]);
}
return 0;
}