初识动态规划

Posted lyqf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了初识动态规划相关的知识,希望对你有一定的参考价值。

1.能用动态规划解决的问题的特点:

  1)问题具有最有子结构性质。如果问题的最优解包含的子问题的解也是最优的,就称该问题有最优子结构性质

  2)无后效性。当前的若干状态值一旦确定,则此后过程的演变就之和这若干个状态的值有关,和之前是采取哪种手段或经过那条路径演变到当前的这若干个状态,没有关系。

 

2.思路:

  1)把原问题分解为若干个子问题,子问题和原问题形式相同或类似,只不过规模变小了。子问题解决了,原问题即可解决。子问题的解一旦求出就会保存,所以只需要求一次

  2)确定状态:整个问题的时间复杂度是状态数乘以计算每个状态所需时间,状态可以是一个数(如:数字三角形求最大和),也可以是一行(如:二维数组),也可以是其他形式。

  3)确定初始状态 / 边界状态的值。

  4)确定状态转移方程不同状态之间如何迁移

 

例题:最长上升子序列hdu1069,数字三角形

 

动规常见的两种形式:递归型(容易爆栈),递推型(可以用动态滚动数组,但要注意顺序,方向)

 

  

 

以上是关于初识动态规划的主要内容,如果未能解决你的问题,请参考以下文章

初识动态规划

C++ 不知算法系列之初识动态规划算法思想

DP 动态规划初识

初识动态规划

超棒的DP问题详解之初识动态规划

Java入门算法(动态规划篇1:初识动规)