动态规划问题解题思路

动态规划问题的常用解题思路

!!! 还是要多练题的。不断地提升自己的逻辑能力

  • 确定状态:首先确定问题的状态,即问题的子问题是什么,以及如何表示子问题的状态。状态的选择要满足问题的最优子结构性质。

  • **定义状态转移方程:**根据问题的最优子结构性质,推导出状态之间的转移关系,即状态转移方程。状态转移方程描述了如何从一个状态转移到另一个状态,并且通常可以通过已解决的子问题的解来计算当前状态的解。

  • 初始化边界条件:确定最小规模子问题的解,即边界条件。在动态规划中,通常需要对边界条件进行初始化,以便后续的递推计算。

  • 递推计算:根据状态转移方程和边界条件,通过递推计算填充状态表格或数组。通常采用自底向上的方式,从最小规模的子问题开始逐步计算,直到求解原问题。

  • 解决原问题:最终得到状态表格或数组中所需要的结果,即原问题的解。根据问题的具体要求,可能需要从状态表格中提取某些值或找到特定位置的解

确定状态:首先确定问题的状态,即问题的子问题是什么,以及如何表示子问题的状态。状态的选择要满足问题的最优子结构性质。

  • 爬楼梯问题:
    假设有一个经典的动态规划问题,即「爬楼梯」问题。问题描述如下:假设你正在爬楼梯。每次你可以爬 1 个台阶或 2 个台阶。编写一个函数来计算你爬到楼梯顶部的方式总数
    这个问题的子问题就是:
    即问题的子问题可以定义为「在第 i 级台阶时,有多少种爬楼梯的方式
  • 背包问题
    子问题:当背包容量只有1时候,只有2时候…

定义状态转移方程:根据问题的最优子结构性质,推导出状态之间的转移关系,即状态转移方程。状态转移方程描述了如何从一个状态转移到另一个状态,并且通常可以通过已解决的子问题的解来计算当前状态的解。

  • 像梯子问题一样,像梯子问题一样
    f(3) = f(1) + f(2) = 3(三级台阶可以从第一级一次到达,也可以从第二级一次到达)

初始化边界条件:确定最小规模子问题的解,即边界条件。在动态规划中,通常需要对边界条件进行初始化,以便后续的递推计算。

  • 像梯子问题一样,最小的子规模就是
    f(1) = 1(一级台阶只有一种方式)
    f(2) = 2(两级台阶有两种方式:一次爬两级或者每次爬一级)

递推计算:根据状态转移方程和边界条件,通过递推计算填充状态表格或数组。通常采用自底向上的方式,从最小规模的子问题开始逐步计算,直到求解原问题。

  • 计算出最后的结果

解决原问题:最终得到状态表格或数组中所需要的结果,即原问题的解。根据问题的具体要求,可能需要从状态表格中提取某些值或找到特定位置的解。

  • 14
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值