ImageVerifierCode 换一换
格式:DOCX , 页数:27 ,大小:56.66KB ,
资源ID:15710549      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/15710549.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单调队列在信息竞赛的研究与应用Word文档下载推荐.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单调队列在信息竞赛的研究与应用Word文档下载推荐.docx

1、(实际操作中,由于是按序逐个出队,所以每次只需要出队只需要比较队头)。每个元素最多进队一次,出队一次,摊排分析下来仍然是 O(1)。上面的话可能还是没能讲出单调队列的核心:队列并不实际存在的,实际存在的是具有单调性的子序列。对这个子序列按心中的队列进行操作,譬如在进队时丢弃的元素,虽然它不存在于这个子序列里,但是还是认为他存在于队列里。poj 2823是一个典型的单调队列题,不过因为题目要求中大量的输入输出的使得时间要求竟然卡scanf和printf的字符串解析(直接实现要5000ms),害得我极其猥琐的手动输入输出解析(800+ms),真是不爽。另外进队的顺序和出队的顺序并不一定相同,因为这

2、个队列本身是隐含存在的,可以在进队时看成一个队列,出队时看成另一个队列,只要出队的元素在队列中就行。可以想象成一个队列只有头和身,另一个队列只有身和尾,而这身是共用的。在信息学竞赛的一些应用先介绍单调队列做动态规划时常常会见到形如这样的转移方程:fx = max or ming(k) | bx = k x + wx(其中bx随x单调不降,即b1=b2=b3=.=bn)(gk表示一个和k或fk有关的函数,wx表示一个和x有关的函数)这个方程怎样求解呢?我们注意到这样一个性质:如果存在两个数j, k,使得j = k,而且g(k) = g(j),则决策j是毫无用处的。因为根据bx单调的特性,如果j可

3、以作为合法决策,那么k一定可以作为合法决策,又因为k比j要优,(注意:在这个经典模型中,“优”是绝对的,是与当前正在计算的状态无关的),所以说,如果把待决策表中的决策按照k排序的话,则g(k)必然是不降的。这样,就引导我们使用一个单调队列来维护决策表。对于每一个状态f(x)来说,计算过程分为以下几步:1、 队首元素出队,直到队首元素在给定的范围中。2、 此时,队首元素就是状态f(x)的最优决策,3、 计算g(x),并将其插入到单调队列的尾部,同时维持队列的单调性(不断地出队,直到队列单调为止)。重复上述步骤直到所有的函数值均被计算出来。不难看出这样的算法均摊时间复杂度是O(1)的。因此求解f(

4、x)的时间复杂度从O(n2)降到了O(n)。单调队列指一个队列中的所有的数符合单调性(单调增或单调减),在信息学竞赛的一些题目上应用,会减少时间复杂度编辑本段例题:广告印刷(ad.pas/c/cpp)【问题描述】最近,afy决定给TOJ印刷广告,广告牌是刷在城市的建筑物上的,城市里有紧靠着的N个建筑。afy决定在上面找一块尽可能大的矩形放置广告牌。我们假设每个建筑物都有一个高度,从左到右给出每个建筑物的高度H1,H2HN,且0Hi=1,000,000,000,并且我们假设每个建筑物的宽度均为1。要求输出广告牌的最大面积。【输入文件】中的第一行是一个数n (n= 400,000 )第二行是n个数

5、,分别表示每个建筑物高度H1,H2HN,且0=1,000,000,000。【输出文件】输出文件 ad.out 中一共有一行,表示广告牌的最大面积。【输入样例】65 8 4 4 8 4【输出样例】24【解释】各个测试点一秒,但就这道题来说,n= 400,000,我们如果用枚举不会过全部数据,我们应设计出o(n)的算法来解决,这是单调队列就可以派上用场了。具体做法是 先正着扫一遍,再倒着扫一遍,找到每一个数的右极限与左极限,最后找出最大值。代码:program bensen;vartemp,ans:int64;n,p,q,i,j:longint;a:array0.400000 of longint

6、;b,r,l:beginreadln(n);for i:=1 to n doread(ai);p:=1;q:=0;=1 to n+1 dowhile (p=q) and (aians then ans:=temp;writeln(ans);end.单调队列及其应用关键字队列,合并果子,窗户,广告印刷,最长XX子序列,志愿者选拔,动态规划,烽火传递正文单调队列,望文生义,就是指队列中的元素是单调的。如:a1,a2,a3,a4an满足a1=a2=a3=an,a序列便是单调递增序列。同理递减队列也是存在的。单调队列的出现可以简化问题,队首元素便是最大(小)值,这样,选取最大(小)值的复杂度便为o(1

7、),由于队列的性质,每个元素入队一次,出队一次,维护队列的复杂度均摊下来便是o(1)。如何维护单调队列呢,以单调递增序列为例:1、如果队列的长度一定,先判断队首元素是否在规定范围内,如果超范围则增长对首。2、每次加入元素时和队尾比较,如果当前元素小于队尾且队列非空,则减小尾指针,队尾元素依次出队,直到满足队列的调性为止要特别注意头指针和尾指针的应用。下面介绍单调队列的具体应用:一、单调队列的直接应用1.合并果子【问题描述】在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆。多多决定把所有的果子合成一堆。每一次合并,多多可以把两堆果子合并到一起,消耗的体力等于两堆果子

8、的重量之和。可以看出,所有的果子经过n-1次合并之后,就只剩下一堆了。多多在合并果子时总共消耗的体力等于每次合并所耗体力之和。因为还要花大力气把这些果子搬回家,所以多多在合并果子时要尽可能地节省体力。假定每个果子重量都为1,并且已知果子的种类数和每种果子的数目,你的任务是设计出合并的次序方案,使多多耗费的体力最少,并输出这个最小的体力耗费值。例如有3种果子,数目依次为1,2,9。可以先将1、2堆合并,新堆数目为3,耗费体力为3。接着,将新堆与原先的第三堆合并,又得到新的堆,数目为12,耗费体力为12。所以多多总共耗费体力=3+12=15。可以证明15为最小的体力耗费值。【输入文件】输入文件fr

9、uit.in包括两行,第一行是一个整数n(1 = n = 10000),表示果子的种类数。第二行包含n个整数,用空格分隔,第i个整数ai(1 = ai = 20000)是第i种果子的数目。【输出文件】输出文件fruit.out包括一行,这一行只包含一个整数,也就是最小的体力耗费值。输入数据保证这个值小于231。【样例输入】31 2 9【样例输出】15【数据规模】对于30%的数据,保证有n = 1000;对于50%的数据,保证有n = 5000;对于全部的数据,保证有n = 10000。分析:这个题目非常的经典,发放也很多,可以采用快排或者堆,其思想都是选取当前最小的两个堆进行合并。复杂度均为O

10、(nlogn),如果用有序队列维护,时间复杂度为O(n)。每次选取进行合并的两堆,不是最先给定的堆,就是合并最初堆若干次后得到的新堆,所以需要维护两个单调递增队列,一个队列存最初给定的堆的值(1),一个存合并后得到的新值(2)。每次选择时有三种状态:1、选取队一的队首两个2、选取队2的的队首两个3、选取二者队首各一个只需对每个队列的指针做相应的更改。特别注意初始化。这道题很好的运用了题目中决策的单调性,对初始对经行排序,保证了其单调性。而对于新产生的堆来说,一旦有新元素加入其中,则新元素一定大于原有元素。(很显然,由于队列1的单调性)。也就是说,队列的单调性是自然而然的。是不需要维护的。要善于观察分析,才能发现。Codeprogram liukee;vara,b:array1.100000 of longint;h1,h2,t2,temp,n,i,ans:function min(a,b,c:longint):beginif ab then min:=aelse min:=b;if cmin then min:=c;end;procedure sort(l,r:longint);i,j,mid,temp:i:=l;j:=r;mid:=al+random(r-l);/随机化排序repeatwhile aimid do dec(j);if ij;r then

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1