434
社区成员
发帖
与我相关
我的任务
分享一、动态规划方程
1、状态表示:
令 dp[i][j] 表示从起点 (1, 1) 到达 (i, j) 的最低路费
2、状态方程:
dp[i][j]=min(dp[i-1][j],dp[i][j-1])+A[i][j]
其中,A[i][j]代表该点的路费
3、边界条件 :
首先,初始化起点 dp[1][1]=A[1][1]
第一列(只能从上方到达): dp[i][1]=dp[i−1][1]+A[i][1]
第一行(只能从左方到达): dp[1][j]=dp[1][j−1]+A[1][j]
4、空间、时间复杂度分析:
空间为O(n^2),因为用到一个大小为N*N的二维dp数组
时间为O(n*n),因为要遍历一个N*N的dp数组,且每一步的时间复杂度为O(1)
二、动态规划的思考与体会
动态规划是主要用于解决具有重叠子问题和最优子结构性质的问题。其基本思想是将一个复杂的问题分解成较小的子问题,通过记录子问题的解来避免重复计算,从而提高算法的效率。
1、状态转移方程描述了如何从已知的状态推导出未知状态。通过构造递推关系,可以有效地计算出最终答案。在设计状态转移方程时,需考虑所有可能的选择或路径,以确保没有遗漏。自下而上解决问题。
2、边界条件的初始化是动态规划中的起始点,通常是简单的子问题。清楚边界条件的设置,自下而上去构造dp数组。