Skip to content

Latest commit

 

History

History

0898

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 

题目

给定一个如下图所示的数字三角形,从顶部出发,在每一结点可以选择移动至其左下方的结点或移动至其右下方的结点,一直走到底层,要求找出一条路径,使路径上的数字的和最大。

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

输入格式

第一行包含整数 $n$,表示数字三角形的层数。

接下来 $n$ 行,每行包含若干整数,其中第 $i$ 行表示数字三角形第 $i$ 层包含的整数。

输出格式

输出一个整数,表示最大的路径数字和。

数据范围

$1 \le n \le 500$,

$-10000 \le 三角形中的整数 \le 10000$

输入样例:

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

输出样例:

30

题解

前置题目:0000

前置知识:无

本题知识:动态规划-线性DP

题目分析

本题较为经典,可直接套用动态规划的解题思想

数字三角形

实现细节

  • 用delve来debug是真的好用

  • 状态拆分自顶向下和自底向上都是可以的,但自底向上无需考虑边界问题,代码会更简洁

  • 对输入数据的保存是从 0 开始还是从 1 开始 代码实现中如果有 i-1 的操作,最好从 1 开始,这样可以保证 i-1 是大于等于 0 的,不会数组越界

复杂度

动态规划的时间复杂度 = 状态数量 x 转移计算量

本题的时间复杂度 = O(n^2) * O(1) = O(n^2)