第三章作业

动态规划法求解数字三角形问题 实践报告

一、问题分析

数字三角形问题要求从三角形顶部出发,每次只能向下或向右下移动,求到达底部路径的最大数字和。

二、动态规划求解步骤分析

状态定义​

设 arr[i][j]表示从位置 (i, j)出发到达三角形底部的最大路径和。

最优子结构性质​

从 (i, j)出发的最优解包含从它下方两个位置 (i+1, j)和 (i+1, j+1)出发的最优解之一,即整体最优解包含子问题的最优解。

递归方程式​

arr[i][j]=arr[i][j]+max(arr[i+1][j],dp[i+1][j+1])

边界条件​

当 i = n-1(最后一行)时:arr[n−1][j]=arr[n−1][j](其中 0≤j≤n−1)

表的维度​

二维表:arr[n][n]

有效区域:下三角区域(j ≤ i)

填表范围​

行范围:i从 n-2到 0(自底向上)

列范围:对于每行 i,j从 0到 i

填表顺序​

采用自底向上的顺序:初始化最后一行:arr[n-1][j] = arr[n-1][j],从倒数第二行开始向上逐行计算,每行从左到右计算

原问题的最优值​

dp[0][0]表示从三角形顶部出发到达底部的最大路径和。

算法复杂度分析

时间复杂度​

三角形总元素数:n(n+1)/2 = O(n²),每个元素计算时间为 O(1),总时间复杂度:O(n²)

空间复杂度​

算法原地修改输入数组,不需要额外空间,空间复杂度:O(1)(不计输入存储空间)

对动态规划算法的理解与体会

动态规划适用于具有最优子结构​和重叠子问题​的问题。本题中,从某点到底部的最优解,可由其下方两点最优解推导,体现了最优子结构。直接递归会重复计算子问题,而这可以通过填表避免了重复计算。对于数字三角形这类问题,从下往上递推比从上往下更简洁,因为底部状态已知,向上推没有条件判断。

posted @ 2025-11-18 23:25  CxxxxQ  阅读(3)  评论(0)    收藏  举报