动态规划( DP ),是一种重要的算法设计思想,是算法设计的一柄利器。但是,要掌握DP并且运用自如,绝对不是什么容易的事。
DP的基本思想:
1. 把一个大问题的解转化为若干个小问题的解。
2. 如果得到了这些小问题的解,然后再经过一定的处理,就可以得到原问题的解。
3. 这些小问题与原问题有着结构相同,即小问题还可以继续分解。
4 这样一直分下去,问题的规模就会不断减小,直到小的不能再小,最终会得到原子问题。
5. 原子问题的解显而易见,这样递推回去,就可以得到原问题的解
DP的具体实现:
1. 分析问题,得体状态转换方程
2. 根据状态转换方程,从原子问题开始,不断向上求解,直到得到原问题的解。
3. 这个过程,一般是一个填表的过程。
哎,好抽象呀!木有办法,如果抛开具体问题,只讲原理,效果就是这样的坑爹。下面都是一些经典的题目,还是结合这些具体问题,一点一点慢慢体会吧。
POJ 1088 滑雪
POJ 1163 The Triangle
POJ 1050 To the Max
POJ 1159 Palindrome
POJ 1458 Common Subsequence
POJ 1141 Brackets Sequence
POJ 1160 Post Office
POJ 1037 A decorative fence