第三章作业

一 数字三角形问题的动态规划解法

1 问题分析

有个数字三角形,n行数字,从最上面走到最下面,每一步只能往左下或者右下走。要找一条路径,让路径上的数字加起来最大。

最优解就是那条和最大的路径,最优值就是那个最大的和。

这个问题可以拆成小问题,走到最下面某个点的最大路径,取决于走到它上面那些点的最大路径。

2 递推公式

用dp[i][j]表示从顶点走到第i行第j个位置的最大和。

一般情况:dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j]

开头的时候:dp[0][0] = triangle[0][0]

边界情况:

· 最左边的点(j=0):只能从右上过来,dp[i][0] = dp[i-1][0] + triangle[i][0]
· 最右边的点(j=i):只能从左上过来,dp[i][i] = dp[i-1][i-1] + triangle[i][i]

3 怎么算

搞个二维表dp,n行n列。

从上往下算,每一行从左往右算。

最后看看最下面一行哪个数最大,就是我们要的答案。

4 复杂度

时间O(n2),空间O(n2)

二 对动态规划的理解

动态规划核心思想就是把大问题拆成小问题,记住小问题的答案,避免重复计算。

它教我们系统性地分解问题,通过存中间结果来高效求解。关键是找到那个状态定义和递推关系。

其实就是用空间换时间,把指数复杂度降到多项式复杂度。

posted @ 2025-11-18 20:26  黄熙雯  阅读(4)  评论(0)    收藏  举报