C案例04动态规划课件.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《C案例04动态规划课件.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 案例 04 动态 规划 课件
- 资源描述:
-
1、2022-8-81第第四四讲讲动态规划动态规划(Dynamic programmingDynamic programming)2022-8-82一、一、经典问题经典问题:数塔问题数塔问题 有形如下图所示的数塔,从顶部出发,在每有形如下图所示的数塔,从顶部出发,在每一结点可以选择向左走或是向右走,一直走到底一结点可以选择向左走或是向右走,一直走到底层,要求找出一条路径,使路径上的值最大。层,要求找出一条路径,使路径上的值最大。2022-8-83用用暴力暴力的方法,可以吗?的方法,可以吗?2022-8-84这道题如果用枚举法(暴力思想),在数塔层数稍大的情况下(如31),则需要列举出的路径条数将是
2、一个非常庞大的数目(230=10243 109=10亿)。试想一下:试想一下:2022-8-85 拒绝拒绝暴力,暴力,倡导倡导和谐和谐2022-8-86从顶点出发时到底向左走还是向右走应取决于是从顶点出发时到底向左走还是向右走应取决于是从左走能取到最大值还是从右走能取到最大值,只要从左走能取到最大值还是从右走能取到最大值,只要左右两道路径上的最大值求出来了才能作出决策。左右两道路径上的最大值求出来了才能作出决策。同样,下一层的走向又要取决于再下一层上的最同样,下一层的走向又要取决于再下一层上的最大值是否已经求出才能决策。这样一层一层推下去,大值是否已经求出才能决策。这样一层一层推下去,直到倒数
3、第二层时就非常明了。直到倒数第二层时就非常明了。如数字如数字2,只要选择它下面较大值的结点,只要选择它下面较大值的结点19前进前进就可以了。所以实际求解时,可从底层开始,层层递就可以了。所以实际求解时,可从底层开始,层层递进,最后得到最大值。进,最后得到最大值。结论:自顶向下的分析,自底向上的计算。结论:自顶向下的分析,自底向上的计算。考虑一下:考虑一下:2022-8-87思路:从倒数第二行起,思路:从倒数第二行起,按照状态转移方程按照状态转移方程dpij=max(dpi+1j,dpi+1j+1)+valij向上递推,向上递推,直到直到val11,此时此时dp11就是结果就是结果2022-8-
4、88二、二、经典问题经典问题:最长有序子序列:最长有序子序列n问题描述 找出由n个元素组成的序列的最长有序子序列长度及其中一个最长有序子序列(注:这里有序指非递减顺序,且不要求子序列连续)。例如,对于序列3,7,1,5,9,3,其中最长有序子序列长度为3,这样的子序列有:3,7,9、1,5,9、3,5,9。2022-8-89二、二、经典问题经典问题:最长有序子序列:最长有序子序列2022-8-810二、二、经典问题经典问题:最长有序子序列:最长有序子序列2022-8-811二、二、经典问题经典问题:最长有序子序列:最长有序子序列2022-8-812三三 11601160 FatMouses S
5、peed FatMouses Speed Problem DescriptionFatMouse believes that the fatter a mouse is,the faster it runs.To disprovethis,you want to take the data on a collection of mice and put as large asubset of this data as possible into a sequence so that the weights are increasing,but the speeds are decreasing
6、.InputInput contains data for a bunch of mice,one mouse per line,terminated byend of file.The data for a particular mouse will consist of a pair of integers:the firstrepresenting its size in grams and the second representing its speed incentimeters per second.Both integers are between 1 and 10000.Th
7、e data ineach test case will contain information for at most 1000 mice.Two mice may have the same weight,the same speed,or even the sameweight and speed.2022-8-813三三 11601160 FatMouses Speed FatMouses Speed nOutputnYour program should output a sequence of lines of data;the first line should contain
8、a number n;the remaining n lines should each contain a single positive integer(each one representing a mouse).If these n integers are m1,m2,.,mn then it must be the case that Wm1 Wm2 .Sm2 .SmnIn order for the answer to be correct,n should be as large as possible.All inequalities are strict:weights m
9、ust be strictly increasing,and speeds must be strictly decreasing.There may be many correct outputs for a given input,your program only needs to find one.2022-8-814三三 11601160 FatMouses Speed FatMouses Speed Sample Input6008 1300 6008 1300 6000 21006000 2100 500 2000 500 2000 1000 4000 1000 4000 110
10、0 3000 1100 3000 6000 2000 6000 2000 8000 1400 8000 1400 6000 1200 6000 1200 2000 1900 2000 1900 Sample Output4 4 5 9 72022-8-815三三 11601160 FatMouses Speed FatMouses Speed 解题思路:解题思路:题目要求找到的体重递增,速度递减题目要求找到的体重递增,速度递减老鼠,先把老鼠的体重进行升序排序老鼠,先把老鼠的体重进行升序排序然后算出速度的最长递减子序列。然后算出速度的最长递减子序列。2022-8-816四四 1087 1087
11、Super Jumping!Jumping!Super Jumping!Jumping!Juping!Juping!nProblem DescriptionnNowadays,a kind of chess game called“Super Jumping!Jumping!Jumping!”is very popular in HDU.Maybe you are a good boy,and know little about this game,so I introduce it to you now.n nThe game can be played by two or more tha
12、n two players.It consists of a chessboard(棋盘)and some chessmen(棋子),and all chessmen are marked by a positive integer or“start”or“end”.The player starts from start-point and must jumps into end-point finally.In the course of jumping,the player will visit the chessmen in the path,but everyone must jum
13、ps from one chessman to another absolutely bigger(you can assume start-point is a minimum and end-point is a maximum.).And all players cannot go backwards.One jumping can go from a chessman to next,also can go across many chessmen,and even you can straightly get to end-point from start-point.Of cour
14、se you get zero point in this situation.A player is a winner if and only if he can get a bigger score according to his jumping solution.Note that your score comes from the sum of value on the chessmen in you jumping path.Your task is to output the maximum value according to the given chessmen list.2
15、022-8-817四四 1087 1087 Super Jumping!Jumping!Super Jumping!Jumping!Juping!Juping!nInputnInput contains multiple test cases.Each test case is described in a line as follow:N value_1 value_2 value_N It is guarantied that N is not more than 1000 and all value_i are in the range of 32-int.A test case sta
16、rting with 0 terminates the input and this test case is not to be processed.n nOutputnFor each case,print the maximum according to rules,and one line one case.2022-8-818四四 1087 1087 Super Jumping!Jumping!Super Jumping!Jumping!Juping!Juping!nSample Inputn3 1 3 2 n4 1 2 3 4 n4 3 3 2 1 n0n nSample Outp
17、utn4 n10 n3解题思路?解题思路?找序列中最大升序子序列的和找序列中最大升序子序列的和 2022-8-820n动态规划算法与分治法类似,其基本思想也是将待求解问题分解成若干个子问题nT(n/2)T(n/2)T(n/2)T(n/2)T(n)=2022-8-821n但是经分解得到的子问题往往不是互相独立的。不同子问题的数目常常只有多项式量级。在用分治法求解时,有些子问题被重复计算了许多次。nT(n)=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2T(n/4)T(n/4)
18、T(n/4)T(n/4)2022-8-822n如果能够保存已解决的子问题的答案,而在需要时再找出已求得的答案,就可以避免大量重复计算,从而得到多项式时间算法。n=n/2T(n/4)T(n/4)T(n/4)T(n/4)n/2n/2T(n/4)T(n/4)n/2T(n/4)T(n/4)T(n/4)T(n/4)T(n/4)T(n)2022-8-823n找出最优解的性质,并刻划其结构特征。n递归地定义最优值。n以自底向上的方式计算出最优值。n根据计算最优值时得到的信息,构造最优解。2022-8-824 问题的最优解包含着其子问题的最优解。这种性质称为最优最优子结构性质子结构性质。在分析问题的最优子结构
19、性质时,所用的方法具有普遍性:首先假设由问题的最优解导出的子问题的解不是最优的,然后再设法说明在这个假设下可构造出比原问题最优解更好的解,从而导致矛盾。利用问题的最优子结构性质,以自底向上的方式递归地从子问题的最优解逐步构造出整个问题的最优解。最优子结构是问题能用动态规划算法求解的前提。同一个问题可以有多种方式刻划它的最优子结构,有些表示方法的求解速度更快(空间占用小,问题的维度低)2022-8-825递归算法求解问题时,每次产生的子问题并不总是新问题,有些子问题被反复计算多次。这种性质称为子问题的重叠性质子问题的重叠性质。动态规划算法,对每一个子问题只解一次,而后将其解保存在一个表格中,当再
20、次需要解此子问题时,只是简单地用常数时间查看一下结果。通常不同的子问题个数随问题的大小呈多项式增长。因此用动态规划算法只需要多项式时间,从而获得较高的解题效率。2022-8-826备忘录方法的控制结构与直接递归方法的控制结构相同,区别在于备忘录方法为每个解过的子问题建立了备忘录以备需要时查看,避免了相同子问题的重复求解。int LookupChain(int i,int j)if(mij 0)return mij;if(i=j)return 0;int u=LookupChain(i,i)+LookupChain(i+1,j)+pi-1*pi*pj;sij=i;for(int k=i+1;k
展开阅读全文