DP

动态规划问题的小秘籍

1、动态规划的基本思想:将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。

2、适用动态规划的条件:

最优子结构

子问题重叠

无后效性

3、分析动态规划必须分析的三个基本要素:

阶段、状态、决策

比如:“黑熊过河”

阶段:石墩

状态:dp[i]:记录到达第i个石墩剩余能量的最大值。

决策:dp[i]=max{ dp[i-1], dp[i-2]}-q+a[i];
且 max{ dp[i-1], dp[i-2]}-q>=0

找状态转移方程的秘决:

找当前状态从哪里来的(上一个状态)。

4、注意事项

动态规划编程实现时用的是表格法,所以要注意赋初始值(递推的起点)。

---------------------------------------------分割线-------------------------------------------------

DP的基本步骤

(1)划分阶段:按照问题的时间或空间特征,把问题分为若干个阶段。注意这若干个阶段一定要是有序或者是可排序的(即无后效性),否则问题就无法用动态规划求解。

(2)选择状态:将问题发展到各个阶段时包含的各种情况用不同的状态表示出来。

(3)确定决策并写出状态转移方程:之所以把这两步放在一起,是因为决策和状态转移有着天然的联系,状态转移就是根据上一阶段的状态和决策来导出本阶段的状态。所以,如果我们确定了决策,状态转移方程也就写出来了。

动态规划的关键在于:按照从小到大的次序划分阶段,每个状态只需计算一次并保存下来,这样就避免了对子问题的重复计算。

动态规划的适用条件

(1)最优子结构

问题的整体最优解中包含着它的子问题的最优解,我们把这个特征叫做最优子结构,这也是动态规划求解的前提条件。如上例中“要求黑熊跳到第i个石墩时的最优解,必需先求出跳到第i-1,i-2个石墩的最优解”。

(2)无后效性

当前阶段的状态值,只与之前阶段的状态有关,不受之后阶段的影响。
posted @ 2024-01-25 20:16  RTER  阅读(1)  评论(0编辑  收藏  举报