动态规划

1 可以用动态规划解决的问题的两个条件

最优子结构和重叠的子问题。最优子结构很难定义,定义了也很难理解。就看原问题可不可以被分解从更小规模的子问题,并且解决了子问题后就可以从逻辑上解决原问题,这样的分解就是有效的,就是具有最优子结构的。至于重叠的子问题,这个是为了构造一个表来保存更小规模的子问题的解,然后加速更大规模的问题的解决的。

2 关于表

规模小的子问题先计算出来放在表中,规模大的子问题要用到的时候去查表,然后计算出来之后再填入表中,供规模更大的子问题使用。所以,这个表在循环的过程中逐渐填满的,填满的时候最终的结果也就计算出来了。

3 动态规划的子问题和原问题的的关系

子问题和原问题是同一类问题,不是说把某个子问题解决了,原问题就可以解决,而是要把所有的不同规模的子问题都解决了,才能解决原问题,并且更小规模的子问题的结果是更大规模的子问题所公用的,它们需要一个表来记录下来。当思考一个问题时,发现从当个的子问题和原问题很相关,但是通过解决单个的子问题又不能解决原问题时,就应该想到用动态规划的方法来解决,即解决所有的子问题,最终谋求原问题的解决。

解决动态规划问题分两步:
第一,明确这是一个动态规划问题,最明显的特征就是要解决原问题,必须要解决所有的子问题,并且可以用表来记录这些子问题。

第二,用表来记录子问题,最终谋求原问题的解决。

原文地址:https://www.cnblogs.com/hustdc/p/8038570.html