动态规划算法

动态规划算法详解_不怕困难的博客的博客-CSDN博客

定义:每次决策依赖于当前状态,又随即引起状态的转移。一个决策序列就是在变化的状态中产生的,所以这种多阶段最优化决策解决问题的过程就是动态规划(DP)。

思想:将求解的问题分解成若干子问题。然后按顺序求解子问题,前一问题的解会为后一问题的求解提供信息。在求解任一子问题时,列出各种可能的局部解,通过决策保留那些有可能达到最优的局部解,丢弃其他局部解。依次解决各子问题,最后一个子问题就是初始问题的解。由于动态规划解决的问题多数有重叠子问题这个特点,为减少重复计算,对每一个子问题只解一次,将其不同阶段的不同状态保存在一个二维数组中。与分治法最大的差别是:适合于用动态规划法求解的问题,经分解后得到的子问题往往不是互相独立的(即下一个子阶段的求解是建立在上一个子阶段的解的基础上,进行进一步的求解)。

算法设计:

动态规划可以求解的问题具有的性质:

最优化原理、无后效性、有重叠子问题

DP的三要素:

问题的阶段、每个阶段的状态、前一个阶段到后一个阶段之间的递推关系

状态转移方程的学习:

动态规划——状态转移方程_动态规划状态转移方程_dahehe_的博客-CSDN博客

总结:

主要就是写出状态转移方程,这个公式诠释了划分阶段、确定状态和状态变量、边界条件

例子:

01背包问题

宠物小精灵之收服

你可能感兴趣的:(编程算法学习,c++,算法)