#P1163. The Triangle

The Triangle

描述

7

3 8

8 1 0

2 7 4 4

4 5 2 6 5

(Figure 1)

图1展示了一个数字三角形。请编写程序计算从顶部出发、到达底部任意位置时,经过路径上的数字之和的最大值。每一步可以选择向左下方或向右下方移动。

输入

程序从标准输入读取数据:

  • 第1行:整数NN,表示三角形的行数(1<N1001 < N \leq 100);
  • 接下来的NN行:描述三角形的数据,每行包含若干整数(范围009999),用空格分隔。

输出

程序向标准输出写入:

  • 第1行:路径数字之和的最大值(整数)。

示例

输入数据1

5
7
3 8
8 1 0 
2 7 4 4
4 5 2 6 5

输出数据1

30

来源
IOI 1994

补充说明

  • 动态规划解法:典型的数字三角形问题,可通过自底向上的动态规划高效求解。
  • 状态转移方程
    dp[i][j]dp[i][j]表示从第ii行第jj列出发到底部的最大路径和,则:$$dp[i][j] = triangle[i][j] + \max(dp[i+1][j], dp[i+1][j+1]) $$
  • 边界条件:最底层dp[N][j]=triangle[N][j]dp[N][j] = triangle[N][j]