Pascal动态规划课件_第1页
Pascal动态规划课件_第2页
Pascal动态规划课件_第3页
Pascal动态规划课件_第4页
Pascal动态规划课件_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

动态规划---入门篇DynamicprogrammingEZOI多阶段决策过程多阶段决策过程(multistepdecisionprocess)是指这样一类特殊的活动过程,过程可以按时间顺序分解成若干个相互联系的阶段,在每一个阶段都需要做出决策,全部过程的决策是一个决策序列。动态规划(dynamicprogramming)算法是解决多阶段决策过程最优化问题的一种常用方法,难度比较大,技巧性也很强。利用动态规划算法,可以优雅而高效地解决很多贪婪算法或分治算法不能解决的问题。求解问题的两个重要性质最优子结构性质:如果问题的最优解所包含的子问题的解也是最优的,我们就称该问题具有最优子结构性质(即满足最优化原理)。最优子结构性质为动态规划算法解决问题提供了重要线索。子问题重叠性质:在用递归算法自顶向下对问题进行求解时,每次产生的子问题并不总是新问题,有些子问题会被重复计算多次。动态规划算法正是利用了这种子问题的重叠性质,对每一个子问题只计算一次,然后将其计算结果保存在一个表格中,当再次需要计算已经计算过的子问题时,只是在表格中简单地查看一下结果,从而获得较高的解题效率。最短路径问题图中给出了一个地图,地图中每个顶点代表一个城市,两个城市间的连线代表道路,连线上的数值代表道路的长度。现在,想从城市A到达城市E,怎样走路程最短,最短路程的长度是多少?

[题1]最长不下降子序列【问题描述】设有整数序列b1,b2,b3,…,bm,若存在i1<i2<i3<…<in,且bi1<bi2<bi3<…<bin,则称b1,b2,b3,…,bm中有长度为n的不下降序列bi1,bi2,bi3,…,bin。求序列b1,b2,b3,…,bm中所有长度(n)最大不下降子序列输入:整数序列输出:最大长度n[题1]最长不下降子序列【分析】设F(i)为前I个数中的最大不下降序列长度。由题意不难得知,要求F(i),需要求得F(1)—F(i-1),然后选择一个最大的F(j)(j<i,bi>bj),那么前I个数中最大不下降序列便是前j个数中最大不下降序列后添加bi而得。可见此任务满足最优子结构,可以用动态规划解决。通过上面的分析可得状态转移方程如下:

F(i)=max{F(j)+1}(j<i,bj<bi)边界为F(1)=1【部分代码】f[1]:=1;len:=1;{求解最大不下降序列长度}fori:=2tondobeginf[i]:=1;forj:=1toi-1doif(b[i]>b[j])and(f[i]<f[j]+1)thenf[i]:=f[j]+1;iff[i]>lenthenlen:=f[i]{记录最大值}[题2]数塔贪心法。时间上有保证,但得不到最优解。主要原因是贪心法只顾眼前利益,不考虑长远利益。在规定时间内得到正确结果,唯一的方法就是“动态规划”。下面以示意图表示动态规划的过程:所选路径为:9-12-10-18-10注意分析时,有以下几个特点:(1)将问题划分成了4个阶段;(2)每个阶段均得到了“部分”的最优解,得到最优解时,需要进行条件判断;(3)从最下面一层往顶层推导。[题3]棋盘路径问题【题目简介】有一个n*m的棋盘,左下角为(1,1),右上角为(n,m),如下图:

有一颗棋子,初始位置在(1,1),该棋子只能向右走或者向上走,问该棋子从(1,1)到(n,m)一共有几条路径?输入:两个整数n和m输出:一个数,路径总数[题3]棋盘路径问题【题目简介】如果使用枚举的方法,必定有很多路径被重复走过,这样,势必造成程序运行时间的浪费,当n和m的值比较大的时候,程序很可能超时。为了避免程序的重复运行,我们可以通过记录点(1,1)到任意一个点(I,j)的路径总数来解决这个问题。假设F[I,j]是点(1,1)到点(I,j)(1≤i≤n,1≤j≤m)的路径总数,因为棋子在棋盘中只能向右或者向上走,所以棋盘中只能2个点的棋子可以走到点(I,j),即点(I,j-1)和(i-1,j),这样,我们就可以知道,F[I,j]必定是F[I,j-1]和F[i-1,j]的和,即F[i,j]=F[i-1,j]+F[i,j-1]【例4】街道问题

在一般情况下,如果我们用二维数组H(i,j)和V(i,j)分别表示水平方向和竖直方向的各路段长度,如H(1,2)表示水平方向上路口(1,1)到路口(1,2)的路段长度,V(1,2)表示竖值方向上路口(0,2)到路口(1,2)的路段长度,则有公式:如dpl(i,j)=min{dpl(i-1,j)+v(i,j),dpl(i,j-1)+h(i,j)}[题5]机器分配【问题描述】总公司拥有高效生产设备M台,准备分给下属的N个公司。各分公司若获得这些设备,可以为国家提供一定的盈利。问:如何分配这M台设备才能使国家得到的盈利最大?求出最大盈利值。其中M≤15,N≤10。分配原则:每个公司有权获得任意数目的设备,但总台数不得超过总设备数M。保存数据的文件名从键盘输入。数据文件格式为:第一行保存两个数,第一个数是设备台数M,第二个数是分公司数N。接下来是一个M*N的矩阵,表明了第I个公司分配J台机器的盈利。[题5]机器分配【分析】这是一个典型的动态规划试题。用机器数来做状态,数组F[I,J]表示前I个公司分配J台机器的最大盈利。则状态转移方程为F[i,j]=Max{F[i-1,k]+Value[i,j-k]}

(0〈=K〈=J〉[题6]0-1背包问题这是最基础的背包问题,特点是:每种物品仅有一件,可以选择放或不放。用子问题定义状态:即f[i][v]表示前i件物品恰放入一个容量为v的背包可以获得的最大价值。则其状态转移方程便是:f[i][v]=max{f[i-1][v],f[i-1][v-c[i]]+w[i]}[题7]完全背包问题【题目】有N种物品和一个容量为V的背包,每种物品都有无限件可用。第i种物品的费用是c[i],价值是w[i]。求解将哪些物品装入背包可使这些物品的费用总和不超过背包容量,且价值总和最大。[题7]完全背包问题【基本思路】这个问题非常类似于01背包问题,所不同的是每种物品有无限件。也就是从每种物品的角度考虑,与它相关的策略已并非取或不取两种,而是有取0件、取1件、取2件……等很多种。如果仍然按照解01背包时的思路,令f[i][v]表示前i种物品恰放入一个容量为v的背包的最大权值。仍然可以按照每种物品不同的策略写出状态转移方程,像这样:f[i][v]=max{f[i-1][v-k*c[i]]+k*w[i]}0<=k*c[i]<=v[题8]拦截导弹【分析】设D(i)为第i枚导弹被拦截之后,这套系统最多还能拦截的导弹数(包含被拦截的第i枚)。我们可以设想,当系统拦截了第k枚导弹xk,而xk又是序列X={x1,x2,…,xn}中的最小值,即第k枚导弹为所有飞来的导弹中高度最低的,则有D(k)=1;当系统拦截了最后一枚导弹xn,那么,系统最多也只能拦截这一枚导弹了,即D(n)=1;其它情况下,也应该有D(i)≥1。根据以上分析,可归纳出问题的动态规划递归方程为:假设系统最多能拦截的导弹数为dmax(即问题的最优值),则

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论