第八讲动态规划初步一、动态规划简介动态规划是运筹学的一个分支
它是解决多阶段决策过程最优化问题的一种方法
1951年,美国数学家贝尔曼(R
Bellman)提出了解决这类问题的“最优化原则”,1957年发表了他的名著《动态规划》,该书是动态规划方面的第一本著作
动态规划问世以来,在工农业生产、经济、军事、工程技术等许多方面都得到了广泛的应用,取得了显著的效果
动态规划运用于信息学竞赛是在90年代初期,它以独特的优点获得了出题者的青睐
此后,它就成为了信息学竞赛中必不可少的一个重要方法,几乎在所有的国内和国际信息学竞赛中,都至少有一道动态规划的题目
所以,掌握好动态规划,是非常重要的
动态规划是一种方法,是考虑问题的一种途径,而不是一种算法
因此,它不像深度优先和广度优先那样可以提供一套模式
它必须对具体问题进行具体分析
需要丰富的想象力和创造力去建立模型求解
[例8-1]拦截导弹某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统
但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度
某天,雷达捕捉到敌国的导弹来袭
由于该系统还在试用阶段,所以只有一套系统,因此有可能不能拦截所有的导弹
输入导弹依次飞来的高度(雷达给出的高度数据是不大于30000的正整数),计算这套系统最多能拦截多少导弹,如果要拦截所有导弹最少要配备多少套这种导弹拦截系统
样例:INPUTOUTPUT389207155300299170158656(最多能拦截的导弹数)2(要拦截所有导弹最少要配备的系统数)[问题分析]第一部分是要求输入数据串中的一个最长不上升序列的长度,可使用递推的方法,具体做法是从序列的第一个元素开始,依次求出以第i个元素为最后一个元素时的最长不上升序列的长度len(i),递推公式为len(1)=1,len(i)=max(len(j