-
线性dp
- 数字三角形
- 状态表示: 属性:路径的最大和,即要求解的目标值。 集合:考虑以第i行第j列的数字结尾的最大和路径,其中i表示行数,j表示列数。
- 状态计算:
- 集合划分:以第i行第j列的数字结尾的最大和路径可以由上一行的某个位置转移而来,即取决于上一行的子问题的最优解。
- 状态转移方程:dp[i][j] = max(dp[i-1][j-1], dp[i-1][j]) + triangle[i][j],其中dp[i-1][j-1]表示上一行第j-1列的最大和路径,dp[i-1][j]表示上一行第j列的最大和路径,triangle[i][j]表示当前位置的数字。
- 初始条件:dp[0][0]的初始值为triangle[0][0],表示数字三角形的顶点
2.区间dp
- 石子合并
-
状态表示:
- 属性:最小的合并代价,即要求解的目标值。
- 集合:考虑合并前i堆石子的最小代价,其中i表示石子的数量。
-
状态计算:
- 集合划分:合并前i堆石子的最小代价可以由前面的子问题转移而来,即取决于前面的合并状态。
- 状态转移方程:dp[i] = min(dp[k] + dp[i-k] + cost[i]),其中dp[k]表示前k堆石子的最小代价,dp[i-k]表示剩余的石子堆的最小代价,cost[i]表示合并第i堆石子的代价。
- 初始条件:dp[0]的初始值为0,表示没有石子需要合并。
-
- 数字三角形