动态规划专题讲义noip..优秀PPT.ppt
《动态规划专题讲义noip..优秀PPT.ppt》由会员分享,可在线阅读,更多相关《动态规划专题讲义noip..优秀PPT.ppt(74页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、动动态态规规划划专专题题讲讲义义前前言言|本文只是个人对动态规划的一本文只是个人对动态规划的一些见解些见解,理论性并不确定能保证理论性并不确定能保证正确正确,有不足和缺漏之处请谅解有不足和缺漏之处请谅解和刚好地指出和刚好地指出.动动态态规规划划|是信息学竞赛中选手必是信息学竞赛中选手必需娴熟驾驭的一种算法需娴熟驾驭的一种算法,他以其他以其多元性广受出题者的宠爱多元性广受出题者的宠爱.书书目目|什么是动态规划什么是动态规划|状态状态 阶段阶段 决策决策|一种确立状态的方法一种确立状态的方法|两种简洁的动规武器两种简洁的动规武器|三种特殊的动态规划三种特殊的动态规划什什么么是是动动态态规规划划|在
2、学习动态规划之前你确定学在学习动态规划之前你确定学过搜寻过搜寻.那么搜寻与动态规划有那么搜寻与动态规划有什么关系呢什么关系呢?我们来下面的一个我们来下面的一个例子例子.数数字字三三角角形形|给你一个数字三角形给你一个数字三角形,形式如形式如下下:|1|2 3|4 5 6|7 8 9 10|找出从第一层到最终一层的一找出从第一层到最终一层的一条条|路路,使得所经过的权值之和最小使得所经过的权值之和最小或或|者最大者最大.数数字字三三角角形形|无论对与新手还是老手,这都是再无论对与新手还是老手,这都是再熟悉不过的题了,很简洁地,我们熟悉不过的题了,很简洁地,我们写出状态转移方程:写出状态转移方程:
3、f(i,j)=ai,j+minf(i-1,j)+f(i-1,j+1)|对于动态规划算法解决这个问题,对于动态规划算法解决这个问题,我们依据状态转移方程和状态转移我们依据状态转移方程和状态转移方向,比较简洁地写出动态规划的方向,比较简洁地写出动态规划的循环表示方法。但是,当状态和转循环表示方法。但是,当状态和转移特别困难的时候,或许写出循环移特别困难的时候,或许写出循环式的动态规划就不是那么简洁了。式的动态规划就不是那么简洁了。|解决方法:解决方法:记记忆忆化化搜搜寻寻|我们尝试从正面的思路去分析问题,我们尝试从正面的思路去分析问题,如上例,不难得出一个特别简洁的如上例,不难得出一个特别简洁的递
4、归过程递归过程:|f1:=f(i-1,j+1);f2:=f(i-1,j);f1:=f(i-1,j+1);f2:=f(i-1,j);|if f1f2 then f:=f1+ai,j if f1f2 then f:=f1+ai,j else f:=f2+ai,j;else f:=f2+ai,j;|自不待言,这个算法就是最简洁的自不待言,这个算法就是最简洁的搜寻算法。时间困难度为搜寻算法。时间困难度为2n2n,明显,明显是会超时的。分析一下搜寻的过程,是会超时的。分析一下搜寻的过程,事实上,很多调用都是不必要的,事实上,很多调用都是不必要的,也就是把产生过的最优状态,又产也就是把产生过的最优状态,又
5、产生了一次。为了避开奢侈,很明显,生了一次。为了避开奢侈,很明显,我们存放一个我们存放一个optopt数组:数组:记记忆忆化化搜搜寻寻|Opti,j-每产生一个每产生一个f(i,j),将将f(i,j)的值放入的值放入opt中,以后再中,以后再次调用到次调用到f(i,j)的时候,干脆从的时候,干脆从opti,j来取就可以了。来取就可以了。|于是动态规划的状态转移方程被直于是动态规划的状态转移方程被直观地表示出来了,这样节约了思维观地表示出来了,这样节约了思维的难度,削减了编程的技巧,而运的难度,削减了编程的技巧,而运行时间只是相差常数的困难度,而行时间只是相差常数的困难度,而且在相当多的状况下,
6、递归算法能且在相当多的状况下,递归算法能更好地避开奢侈,在竞赛中是特别更好地避开奢侈,在竞赛中是特别好用的好用的.记忆化的功效动动态态规规划划的的实实质质|可以看出动态规划的实质就是可以看出动态规划的实质就是|这也就是为什么我们常说动态这也就是为什么我们常说动态规划必需满足重叠子问题的缘规划必需满足重叠子问题的缘由由.记忆化记忆化,正符合了这个要求正符合了这个要求.状状态态 阶阶段段 决决策策|或许有一种对动态规划的简洁或许有一种对动态规划的简洁称法称法,叫分阶段决策叫分阶段决策.其实我认其实我认为这个称法并不是很能让人理为这个称法并不是很能让人理解解.那么下面我们来看看阶段那么下面我们来看看
7、阶段,状态状态,决策这三者间得关系吧决策这三者间得关系吧.状状态态 阶阶段段 决决策策|状态是表现出动态规划核心思想的状态是表现出动态规划核心思想的一个东西一个东西.而分阶段决策这个东西而分阶段决策这个东西有似乎没有提到状态有似乎没有提到状态,这是不科学这是不科学的的.|阶段阶段,有些题目并不确定表现出确有些题目并不确定表现出确定的阶段性定的阶段性.数字三角形的阶段就数字三角形的阶段就是每一层是每一层.这里我们引入一个概念这里我们引入一个概念-以前状态以前状态.但阶段不是以前状态但阶段不是以前状态,状态是阶段的表现形式状态是阶段的表现形式.数字三角数字三角形的以前状态就是当前层的前一层形的以前
8、状态就是当前层的前一层.|那什么是决策呢那什么是决策呢?我们看看下面一我们看看下面一张图就知道了张图就知道了.决决策策明显,从上图可以看出,当前状态通过决策,回到了以前状态.可见决策其实就是状态之间的桥梁。而以前状态也就确定了当前状态的状况。数字三角形的决策就是选择相邻的两个以前状态的最优值。动动规规的的要要诀诀状状态态|我们一般在动规的时候所用到的一我们一般在动规的时候所用到的一些数组,也就是用来存储每个状态些数组,也就是用来存储每个状态的最优值的。的最优值的。|我们就从动态规划的要诀,也就是我们就从动态规划的要诀,也就是核心部分核心部分“状态状态”起先,来逐步了起先,来逐步了解动态规划。解
9、动态规划。拦拦截截导导弹弹|拦截导弹(拦截导弹(Noip2002Noip2002)|某国为了防卫敌国的导弹攻击,发某国为了防卫敌国的导弹攻击,发展出一种导弹拦截系统。但是这种展出一种导弹拦截系统。但是这种导弹拦截系统导弹拦截系统 有一个缺陷:虽然它有一个缺陷:虽然它的第一发炮弹能够到达随意的高度,的第一发炮弹能够到达随意的高度,但是以后每一发炮弹都不能高但是以后每一发炮弹都不能高 于前于前一发的高度。一发的高度。某天,雷达捕获到敌某天,雷达捕获到敌国的导弹来袭。由于该系统还在试国的导弹来袭。由于该系统还在试用阶段,所以用阶段,所以 只有一套系统,因此只有一套系统,因此有可能不能拦截全部的导弹。
10、输入有可能不能拦截全部的导弹。输入导弹依次飞来的高度,计算这套系导弹依次飞来的高度,计算这套系统最多能拦截多少导弹。统最多能拦截多少导弹。拦拦截截导导弹弹|状态的表示状态的表示fi,表示当第,表示当第i个导个导弹必需选择时,前弹必需选择时,前i个导弹最多能拦个导弹最多能拦截多少。截多少。|每个导弹有确定的高度,当前状态每个导弹有确定的高度,当前状态就是以第就是以第i个导弹为最终一个打的导个导弹为最终一个打的导弹。以前状态就是在这个导弹以前弹。以前状态就是在这个导弹以前打的那个导弹。打的那个导弹。|明显这是特别能够体现状态间的联明显这是特别能够体现状态间的联系的题目。系的题目。最最长长公公共共子
11、子串串|给出两个字符串序列。求出这给出两个字符串序列。求出这样的一个最长的公共子串:子样的一个最长的公共子串:子串中的每个字符都能在两个原串中的每个字符都能在两个原串中找到,而且每个字符的依串中找到,而且每个字符的依次和原串中的依次一样。次和原串中的依次一样。交交织织匹匹配配|交织匹配(最长公共子串的改编)交织匹配(最长公共子串的改编)|给你两排数字给你两排数字,只能将两排中只能将两排中数字相同的两个位置相连数字相同的两个位置相连,而每而每次相连必需有两个匹配形成一次次相连必需有两个匹配形成一次交织交织,交织的连线不能再和别的交织的连线不能再和别的交织连线有交点交织连线有交点.问这两排数字问这
12、两排数字最多能形成多少个交织匹配最多能形成多少个交织匹配.12 3 3 2 4 1 5 1 3 5 103 1 2 3 2 4 12 1 5 5 3 状态的表示状态的表示fi,jfi,j表示前表示前i i个第一排的数个第一排的数字和前字和前j j个其次排的数字搭配的最优值。个其次排的数字搭配的最优值。当前的状态就是当前你枚举到的一组交织当前的状态就是当前你枚举到的一组交织的后面两个位置的后面两个位置.例如上图中当前状态是例如上图中当前状态是3 3和和1(1(第一组交织第一组交织),),枚举他的以前状态就有枚举他的以前状态就有1 1 3.3.这样在这样在1 31 3之前会有一个最优值存在之前会有
13、一个最优值存在,因因此可以由此得到此可以由此得到3 13 1的最优值的最优值.买买车车票票|买车票买车票(Ural1031)(Ural1031)|Ekaterinburg Ekaterinburg城到城到SverdlovskSverdlovsk城有直线形的铁路城有直线形的铁路途。途。两城之间还有其他一些停靠站两城之间还有其他一些停靠站,总站数为总站数为N N。各站依据离各站依据离EkaterinburgEkaterinburg城的城的距离编号。距离编号。EkaterinburgEkaterinburg城编号为城编号为1 1,SverdlovskSverdlovsk城编号为城编号为N N。买买车
14、车票票某两站之间车票价格由这两站的距离某两站之间车票价格由这两站的距离X X确定确定.当当0X=L10X=L1时,票价为时,票价为C1C1元元.当当L1X=L2L1X=L2时,票价为时,票价为C2C2元元.当当L2X=L3L2X=L3时,票价为时,票价为C3C3元元.当两站距离大于当两站距离大于L3L3时没有直达票,所以有时候要买几时没有直达票,所以有时候要买几次票做几次车才行。次票做几次车才行。比如,在上面的例图中,比如,在上面的例图中,2-62-6没有直达票,有几种买票没有直达票,有几种买票方法可以从方法可以从2-62-6,其中一种是买,其中一种是买C2C2元的元的2-32-3车票,再买车
15、票,再买C3C3元的元的3-63-6车票。车票。买买车车票票给定起点站和终点站还有给定起点站和终点站还有L1,L2,L3,C1,C2,C3L1,L2,L3,C1,C2,C3,求出要从,求出要从起点到终点最少要花多少钱起点到终点最少要花多少钱.怎怎么么办办买买车车票票当前所在的某个车站这一题的以前状态其实只有这一题的以前状态其实只有3种种.即即满足满足3种距离种距离(收费收费)状况的状况的3个车站个车站.要知道这要知道这3个车站可以先做一个预个车站可以先做一个预处理处理.明显这明显这3个车站在满足距离限个车站在满足距离限制的条件下应当越远越好制的条件下应当越远越好.买买车车票票|预处理预处理|很
16、简洁想出一个很简洁想出一个N2的预处理的预处理,但是但是那样是会超时的那样是会超时的.由于尽量要让车站离由于尽量要让车站离得远得远(费用是一样的啊费用是一样的啊 )因此在每种因此在每种收费状况下收费状况下,每个车站的以前状态车站每个车站的以前状态车站确定是递增的序列确定是递增的序列.这里是只要这里是只要O(N)的程序的程序:|for j:=1 to 3 do|begin|k:=en-1;|for i:=en downto be do|begin|while(wayi-wayk=be)do dec(k);|pij:=k+1;|end;|end;|数组数组Pij表示的是表示的是I状态的第状态的第j
17、种以种以前状态前状态.买买车车票票动态规划的部分动态规划的部分for i:=be+1 to en do 枚举当前状态枚举当前状态 begin costi:=maxlongint;for j:=1 to 3 do 枚举以前状态枚举以前状态 beginif (piji)and(costi costpij+cj)then costi:=costpij+cj;end;end;动动规规的的要要诀诀状状态态|有时候当前状态确定后有时候当前状态确定后,以前状以前状态就已经确定态就已经确定,则无需枚举则无需枚举.TomTom的的苦苦恼恼|TomTom是一个特别有创业精神的人,由于高是一个特别有创业精神的人,由
18、于高校学的是汽车制造专业,所以毕业后他用校学的是汽车制造专业,所以毕业后他用有限的资金开了一家汽车零件加工厂,有限的资金开了一家汽车零件加工厂,特地为汽车制造商制造零件。由于资金有特地为汽车制造商制造零件。由于资金有限,他只能先购买一台加工机器。现在他限,他只能先购买一台加工机器。现在他却遇到了麻烦,多家汽车制造商须要他加却遇到了麻烦,多家汽车制造商须要他加 工一些不同零件(由于厂家和零件不同,工一些不同零件(由于厂家和零件不同,所以给的加工费也不同),而且不同厂家所以给的加工费也不同),而且不同厂家对于不同零件的加工时间要求不同(有些对于不同零件的加工时间要求不同(有些加工时间要求甚至是冲突
19、的,但起先和结加工时间要求甚至是冲突的,但起先和结束时间相同不算冲突)。束时间相同不算冲突)。TomTom当然希望能当然希望能把全部的零件都加工完,以得到更多的加把全部的零件都加工完,以得到更多的加工费,但当一些零件的加工时间要求有冲工费,但当一些零件的加工时间要求有冲突时,在某个时间内他只能选择某种零件突时,在某个时间内他只能选择某种零件加工(因为他只有一台机器),为了赚得加工(因为他只有一台机器),为了赚得尽量多的加工费,尽量多的加工费,TomTom不知如何进行取舍。不知如何进行取舍。TomTom的的苦苦恼恼|Tom的苦恼的苦恼|按结束时间排序,枚举结束时间作按结束时间排序,枚举结束时间作
20、为当前状态为当前状态,以前状态就是该结束时以前状态就是该结束时间对应的起始时间,这是已经确定的间对应的起始时间,这是已经确定的.文文字字游游戏戏|文字游戏文字游戏(fairfox(fairfox邀请赛邀请赛1)1)|给你一份单词表,和一个句子。求出该给你一份单词表,和一个句子。求出该句子能有多少中不同的划分方法句子能有多少中不同的划分方法.例如例如:|单词是单词是ab cd a b c dab cd a b c d|句子是句子是abcdabcd|他共有他共有4 4种完全划分方案种完全划分方案:|ab/cd a/b/c/d a/b/cd ab/c/d;ab/cd a/b/c/d a/b/cd a
21、b/c/d;|当前状态就是单词在句子中向后靠的位当前状态就是单词在句子中向后靠的位置置,以前状态就是确定这个单词位置以后以前状态就是确定这个单词位置以后,除掉这个单词长度后的一个位置除掉这个单词长度后的一个位置.状态转状态转移方程是移方程是:Fi:=Fi+Fi-:Fi:=Fi+Fi-length(wordj)length(wordj)|IOI IOI中有一题前缀也是类似的题目中有一题前缀也是类似的题目.决决策策中中的的定定量量|状态转移方程的构造无疑是动态状态转移方程的构造无疑是动态规划过程中最重要的一步规划过程中最重要的一步,也是也是最难的一步最难的一步.对于大多数的动态对于大多数的动态规划
22、规划,找寻状态转移方程有一条找寻状态转移方程有一条特别高效的通道特别高效的通道,就是找寻变更就是找寻变更中的不变量中的不变量.定量处理的过程也定量处理的过程也就是决策实施的过程就是决策实施的过程.找找寻寻定定量量|最佳加法表达式最佳加法表达式|有一个由有一个由1.91.9组成的数字串组成的数字串.问问假如将假如将m m个加号插入到这个数字个加号插入到这个数字串中串中.使得所形成的算术表达式使得所形成的算术表达式的值最小的值最小.或许你不明白我在说什么,那么我们通过题目来说明吧最最佳佳加加法法表表达达式式|这一题中的定量是什么呢这一题中的定量是什么呢?因为是添因为是添入加号入加号,那么添完加号后
23、那么添完加号后,表达式的表达式的最终确定是个数字串最终确定是个数字串,这就是定量这就是定量.从这里入手从这里入手,不难发觉可以把以前状不难发觉可以把以前状态认为是在前态认为是在前i个字符中插入个字符中插入k-1个加个加号号(这里的这里的i是当作决策在枚举是当作决策在枚举),然然后后i+1到最终一位确定是整个没有被到最终一位确定是整个没有被分割的数字串分割的数字串,第第k个加号就添在个加号就添在i与与i+1个数字之间个数字之间.这样就构造出了整这样就构造出了整个数字串的最优解个数字串的最优解.而至于前而至于前i个字个字符中插入符中插入k-1个加号个加号,这又回到了原这又回到了原问题的形式问题的形
24、式,也就是回到了以前状态也就是回到了以前状态,所以状态转移方程就能很快的构造所以状态转移方程就能很快的构造出来了出来了.最最佳佳加加法法表表达达式式|用用fi,j,表示的是在前表示的是在前i个字符中个字符中插入插入j个加号能达到的最小值个加号能达到的最小值,最最终的答案也就是终的答案也就是Flength(s),m.|于是就有一个动规的方程于是就有一个动规的方程:Fi,j:=min(fi,j,fk,j-1+numk+1,i)numk+1,i表表示示k+1位到位到i位所形成的数字位所形成的数字.这这里明显是把加号插入了第里明显是把加号插入了第k+1个个位置上位置上.|知道了这一题怎么做以后知道了这
25、一题怎么做以后,乘积乘积最大的一题也是完全一样的形式最大的一题也是完全一样的形式,谁还会去用搜寻谁还会去用搜寻?定定量量|现在或许大家已经了解了定量现在或许大家已经了解了定量是什么是什么,那么我们下面通过几那么我们下面通过几道题目来了解一下定量的威力道题目来了解一下定量的威力.游游戏戏|游戏游戏(Noip2003普及组普及组)|这一题的描述简洁说一下这一题的描述简洁说一下:在一在一个圈的四周有个圈的四周有n个石子个石子,将他们将他们划分成划分成m堆堆(每堆中的石子必需每堆中的石子必需连续相邻连续相邻),每一堆石子计算出每一堆石子计算出他们的总重量他们的总重量mod10的值的值,然后然后将这些值
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 动态 规划 专题 讲义 noip 优秀 PPT
限制150内