第三次作业

1.1
dp(i,j) = a(i,j) + max(dp(i+1,j), dp(i+1,j+1))
设数字三角形第i行第j列元素为a(i,j)(i、j从 1 开始计数,第i行有i个元素),定义dp(i,j)为从a(i,j)出发到达三角形底部的最大路径和。
当到达底部(i = n,n为三角形行数)时,路径无法延伸,路径和即为元素自身:dp(n,j) = a(n,j)(j从 1 到n)。

1.2
采用n×n二维表格dp存储子问题最优解(第i行仅前i个元素有效)。
i从n-1逆序遍历至 1(倒数第二行到第一行),j从 1 遍历至i(每行有效元素范围)。
从下往上、每行从左到右填表。
原问题最优值为dp(1,1),即表格左上角元素(从顶部出发的最大路径和)。

1.3
需计算1+2+...+(n-1) = n(n-1)/2个元素,每个元素计算仅需 1 次比较和加法,时间复杂度为O(n²)。
使用n×n二维数组,空间复杂度O(n²)

动态规划的核心是 “分解子问题、利用重叠子问题、依托最优子结构”,通过存储子问题解避免重复计算,实现 “以空间换时间” 的优化。其解题关键在于两点:一是准确定义状态(如dp(i,j)的含义直接决定递归方程推导),二是理清状态转移逻辑,确保子问题解能递推构建原问题解。与贪心算法 “局部最优推导全局最优” 不同,动态规划通过遍历所有相关子问题,保证得到全局最优解,适用于子问题重叠且存在最优子结构的最优化问题(如数字三角形、背包问题等)。实践中,“从下往上” 的填表方式更易处理边界条件,而空间优化的核心是发现 “当前状态仅依赖有限前序状态”,可通过压缩存储降低内存开销。

posted @ 2025-11-18 21:12  陈华贵  阅读(2)  评论(0)    收藏  举报