题目概述:

题目链接:点我做题
题解
一、自顶向底的dp
我们把这个三角形每个点的下标视为矩阵中的点,那么可以定义 f ( i , j ) f(i,j) f(i,j)为自 ( 0 , 0 ) (0,0) (0,0)点到 ( i , j ) (i,j) (i,j)点的最短路径,状态转移方程就是考虑到上一层的每个点的最短路径已经计算过的情况下,这一层的值怎么得来。
由于下一层比上一层多出一个元素,所以下一层有两个点是特殊的,一个是下标为0的点,它只能由上一层下标为0的点到达,另一个是下标为当前层数i的点,它只能由上一层的下标为 i − 1 i-1 i−1的点到达;其他点(下标为j)均可以由上一层的下标为 j − 1 j-1 j−1的点和下标为 j j j的点到达,因此状态转移方程就得到了:
1. j = = 0 , f ( i , j ) = f ( i − 1 , 0 ) + t r i a n g l e [ i ] [ j ] 最 左 边 上 只 能 从 上 一 层 的 最 左 边 上 来 2. j = = i , f ( i , j ) = f ( i − 1 , j − 1 ) + t r i a n g l e [ i ] [ j ] 最 右 边 上 只 能 从 上 一 层 的 最 右 边 上 来 3. 其 他 f ( i , j ) = m i n ( f ( i − 1 , j − 1 ) , f ( i − 1 , j ) ) + t r i a n g l e [ i ] [ j ] 1.j == 0, f(i,j) = f(i - 1, 0) + triangle[i][j] 最左边上 只能从上一层的最左边上来\\ 2.j == i, f(i,j) = f(i - 1, j - 1) + triangle[i][j] 最右边上 只能从上一层的最右边上来\\ 3.其他 f(i,j) = min(f(i - 1, j - 1), f(i - 1, j)) + triangle[i][j] 1.j==0,f(i,j)=f(i−1,0)+triangle[i][j]最左边上只能从上一层的最左边上来2.j==i,f(i,j)=f(i−1,j−1)+trian

本文介绍了一种求解三角形最短路径的问题,通过自顶向下和自底向上的动态规划方法,提供了详细的算法思路及优化技巧,并附带实现代码。
最低0.47元/天 解锁文章
983





