动态规划1:动态规划的入门初学理论基础

 动态规划算法的四个步骤:

1.找出最优解的性质,并刻画其结构特征

2.递归地定义最优值

3.自底向上的方式计算最优值

4.构造最优解 

 注:步骤1~3是动态规划算法的基本步骤,在只需要求出最优的情况下,步骤4可 省略,若需要求出问题的最优(具体的解的过程),则必须执行步骤四

动态规划和分治法的异同:

相同点:

基本思想都是将待求解问题分解为若干子问题,先求解子问题,再结合这些子问题的解得到原问题的解。

不同点: 

与分治法不同,适合动态规划法求解的问题经分解得到的子问题往往不是互相独立的。若用分治法求解这类问题,某些子问题会被重复计算(每次求解某个问题的时候都要重新计算某个相同的子问题)。如果能保存已解决的子问题的答案 ,需要的时候直接拿来用,这一可以避免大量的重复计算,大大缩减了时间复杂度。

分治:从上到下,原问题逐渐分解为子问题

动规:从下到上,从最小子问题逐步推到总问题

所有的动态规划解决方案都涉及网格,来记录所有已解决的子问题答案。不管该子问题以后是否被用到,只要他被计算过,就将结果填入表中。

 

这里利用《算法图解》里的背包问题来帮助理解

动态规划1:动态规划的入门初学理论基础_第1张图片

 动态规划1:动态规划的入门初学理论基础_第2张图片

动态规划1:动态规划的入门初学理论基础_第3张图片 

 

所以最终答案为4000美元

注意:本问题中沿着一列往下走时,最大价值不可能降低,因为每次迭代时你都存储当前的最大价值,不会比以前低

你可能感兴趣的:(专业课学习,动态规划,算法,c++)