




已阅读5页,还剩5页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
动态规划之队列优化浙江省镇海中学 贺洪鸣【例1锯木场选址】(CEOI2004)从山顶上到山底下沿着一条直线种植了n棵树。当地的政府决定把他们砍下来。为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂。木材只能按照一个方向运输:朝山下运。山脚下有一个锯木厂。另外两个锯木厂将新修建在山路上。你必须决定在哪里修建两个锯木厂,使得传输的费用总和最小。假定运输每公斤木材每米需要一分钱。任务你的任务是写一个程序:从标准输入读入树的个数和他们的重量与位置计算最小运输费用将计算结果输出到标准输出输入输入的第一行为一个正整数n树的个数(2n20 000)。树从山顶到山脚按照1,2n标号。接下来n行,每行有两个正整数(用空格分开)。第i+1行含有:vi第i棵树的重量(公斤为单位)和 di第i棵树和第i+1棵树之间的距离,1vi 10 000,0di10 000。最后一个数dn,表示第n棵树到山脚的锯木厂的距离。保证所有树运到山脚的锯木厂所需要的费用小于2000 000 000分。输出输出只有一行一个数:最小的运输费用。样例输入样例输出2691 22 13 31 13 21 62 11 21 1在解决这一问题时,首先我们要明确,将锯木厂建立在相邻两棵树之间是没有任何意义的,否则我们可以将这样的锯木厂上移到最近的一棵树处,此时运送上方树木的费用减少,运送下方树木的费用没有变化,总费用降低。为了方便讨论,我们先作如下定义:假设山脚锯木场处也有一棵树,编号为,并且vn+1=dn+1=0。表示第1棵树到第棵树的质量和,即。表示第1棵树到第棵树的距离,即。特别的,有,表示第1棵树到自己的距离为0。ci表示在第棵树处建一个锯木厂,并且将第1到第i棵树全部运往这个伐木场所需的费用。显然有ci=ci-1+sumwi-1*di-1。特别的,有c1=0。wj,i表示在第棵树处建一个锯木场,并且将第j到第i棵树全部运往这个锯木场所需的费用。则wj,i=ci-cj-1-sumwj-1*(sumdi-sumdj-1)。特别的,当i=j时wj,i=0。综上可知,求出所有sumwi,sumdi与ci的时间复杂度为O(n),此后求任意wj,i的时间复杂度都为O(1)。设fi表示在第i棵树处建立第二个锯木场的最小费用,则有。直接用这个式子计算的时间复杂度为,由于问题规模太大,直接使用这一算法必然超时,因此我们必须对算法进行优化。在讨论如何进行优化以前,我们首先证明下面这一猜想。 猜想如果在位置i建设第二个锯木厂,第一个锯木厂的位置是j时最优。那么如果在位置i+1建设第二个锯木厂,第一个锯木厂的最佳位置不会小于j。证明:假设第1个锯木厂建立在第j个处时,fi取得最优值,且此时j为fi取得最优值时的最小值,如下图所示.此时fi=cj+wj+1,i+wi+1,n+1 则对于任意的kcj+wj+1,i+wi+1,n+1ck+wk+1,icj+wj+1,i第i至第i+1的距离第k+1至第i的总重量ck+wk+1,i+(sumwi-sumwk)*dicj+wj+1,i+(sumwi-sumwk)*di第j+1至第i的总重量,必小于第k+1至第i的总重量ck+wk+1,i+(sumwi-sumwk)*dicj+wj+1,i+(sumwi-sumwj)*dick+wk+1,i+1cj+wj+1,i+1ck+wk+1,i+1+wi+2,n+1cj+wj+1,i+1+wi+2,n+1即求fi+1时,决策k比决策j来得差!因此,当fi的第一个最佳决策为j时,fi+1的第一个最优决策必大于等于j!1jj+1i+1in+1锯木厂Cjwj+1,i+1wi+2,n+1i+21jj+1i+1in+1锯木厂Cjwj+1,iwi+1,n+1证毕!1kK+1i+1in+1Ckwk+1,i+1wi+2,n+1i+21kK+1i+1in+1Ckwk+1,iwi+1,n+1【算法的改进】令sk,i表示决策变量取k时fi的值,即sk,i=ck+wk+1,i+wi+1,n+1。设k1k2,则有sk1,i-sk2,i=(ck1+wk1+1,i+wi+1,n+1)-(ck2+wk2+1,i+wi+1,n+1)=(ck1+ci-ck1-sumwk1*(sumdi-sumdk1)- (ck2+ci-ck2-sumwk2*(sumdi-sumdk2)=sumwk2*(sumdi-sumdk2)- sumwk1*(sumdi-sumdk1)=sumdi(sumwk2-sumwk1)-(sumwk2*sumdk2-sumwk1*sumdk1) 若sk1,i-sk2,i0,则有:sumdi(sumwk2-sumwk1) sumdi或(sumwk1*sumdk1-sumwk2*sumdk2)/ (sumwk1-sumwk2) sumdi 我们令gk1,k2=不等式左边,当gk1,k2sumdi时sk1,i-sk2,i0。由上面已经证明的猜想,说明决策变量j是单调的,(即fi+1的决策j2必大于等于fi时的决策j1)此时问题就好解决了。我们可以维护一个特殊的队列k,这个队列只能从队尾插入,但是可以从两端删除。这个队列满足k1k2k3kp以及gk1,k2gk2,k3gkp-1,kp。1计算状态fi前,若gk1,k20,即决策k1没有k2优,应当删除队首,将k1,k2,指针后移,直至gk1,k2sumdi。此时, sk1,i-sk2,i0, 即决策k1比k2优。2计算状态fi时,直接使用决策k1,fi=ck1+wk1+1,i+wi+1,n+1。O(1)代价! (由当前的决策序列:sumdigk1,k2gk2,k3gkp,i,此时,如果求某个fr时选择Kp为决策,则kp-1决策必然没有kp好,即skp-1,r-skp,r0 = gkp-1,kp gkp,i skp,r-si,r0,此时,说明决策i必然比kp来得优表示在kp比kp-1优之前就将比kp优,kp没必要保存。并且,根据前面的猜想,对于以后的状态,决策i也会比kp优。因此删除kp,将指针p前移,直至gkp-1,kp0,这样,重量前缀数组sumw满足单调性,才会满足第j+1至第i的总重量,必小于第k+1至第i的总重量(kj)。12N3【例2仓库建设】(浙江2007年省选)L公司有N个工厂,由高到底分布在一座山上。如右图所示,工厂1在山顶,工厂N在山脚。由于这座山处于高原内陆地区(干燥少雨),L公司一般把产品直接堆放在露天,以节省费用。突然有一天,L公司的总裁L先生接到气象部门的电话,被告知三天之后将有一场暴雨,于是L先生决定紧急在某些工厂建立一些仓库以免产品被淋坏。由于地形的不同,在不同工厂建立仓库的费用可能是不同的。第i个工厂目前已有成品Pi件,在第i个工厂位置建立仓库的费用是Ci。对于没有建立仓库的工厂,其产品应被运往其他的仓库进行储藏,而由于L公司产品的对外销售处设置在山脚的工厂N,故产品只能往山下运(即只能运往编号更大的工厂的仓库),当然运送产品也是需要费用的,假设一件产品运送1个单位距离的费用是1。假设建立的仓库容量都都是足够大的,可以容下所有的产品。你将得到以下数据: 工厂i距离工厂1的距离Xi(其中X1=0);工厂i目前已有成品数量Pi;在工厂i建立仓库的费用Ci;请你帮助L公司寻找一个仓库建设的方案,使得总的费用(建造费用+运输费用)最小。【输入文件】 输入文件storage.in第一行包含一个整数N,表示工厂的个数。 接下来N行每行包含两个整数Xi, Pi, Ci, 意义如题中所述。【输出文件】 输出文件storage.out仅包含一个整数,为可以找到最优方案的费用。【数据规模】对于20%的数据,N 500;对于40%的数据,N 10000;对于100%的数据,N 1000000。所有的Xi, Pi, Ci均在32位带符号整数以内,保证中间计算结果不超过64位带符号整数。【样例输入】30 5 105 3 1009 6 10【样例输出】32【样例说明】在工厂1和工厂3建立仓库,建立费用为10+10=20,运输费用为(9-5)*3 = 12,总费用32。如果仅在工厂3建立仓库,建立费用为10,运输费用为(9-0)*5+(9-5)*3=57,总费用67,不如前者优。【初步分析】1.状态表示 以sumpi表示第1个工厂至第i个工厂中的总的产品数量; 以sumwi表示将第1个工厂至第i个工厂的所有产中运至第i个工厂的费用; 以wi,j表示将第i个工厂至第j个工厂的所有产中运至第j个工厂的费用。Wi,j=sumwj-sumwi-1-sumpi-1*(xj-xi-1) 所有的sump1.n、sumw1.n可在O(n)的总次数内算出,每个wi,j可以O(1)算出。 以fi表示在第i个工厂建立一个仓库,前i个工厂需要的最小费用; 所求为fn。2.状态转移方程 时间复杂度为O(n2)。 下面使用例1相似的方法,将算法的时间复杂度降为O(n)。【猜想】 求fi函数时的决策k关于i单调。证明:假设求得fi时的最优决策为k,对于任意的jk,我们来证明求fi+1时决策k必优于决策j。证毕!【算法的优化】 令sk,i表示当决策为k时求fi的表达式的值,即sk,i=fk+wk+1,i+ci。 对于k12,删除a2 插入a3 a7a5 a5a7,删除a6 a6a7,删除 a值的下标(设ck=4)a值 a3a7 a值的下标图17队列中元素最大值相应的伪代码(见下页):(以下仅考虑向东滑行的情况,向其他方向滑行的情况可以类似推出)for (x=1; x=n; x+) for (y=1; y=m; y+) f0xy=-;f0startxstarty=0;for (k=1; k=slidenum; k+)for (x=1; x=n; x+)head=tail=0;for (y=1; y=m; y+)if (方格(x,y)上有障碍)fkxy=-; head=tail=0; continue; if (queueheadhead)&(fk-1xqueuetail.num-queuetail.num+1=fk-1xy-y+1)tail-; queue+tail=y; fkxy=fk-1xqueuehead.num+y-queuehead.num;return maxfslidenum11, fslidenum12,fslidenumnm;算法3回顾整个过程,我们首先找到了一个动态规划的解法。但是由于每次转移的时间复杂度太高,使得我们必须减少冗余运算。文中提到的线段树是一个不错的解
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年中国青柚数据监测研究报告
- 2025年中国方脚数据监测报告
- 一年级道德与法治上册 7 学习真快乐说课稿 新人教版
- 智能办公场景中生物降解纸张的规模化生产技术瓶颈与成本曲线分析
- 2025年中国丁香紫数据监测报告
- 智能决策系统在突发订单变更中的自适应重构算法研究
- 智能传感圆盘数据采集精度与能量供应系统的低功耗耦合方案
- 旧物循环经济背景下塑料凳椅化学稳定性与再生利用冲突
- 2025年中国万能工具磨数据监测研究报告
- 新能源汽车渗透率提升导致传统前排气岐管产能过剩与转型阵痛
- 2025年幼师教材考试题目及答案
- 中医备案诊所管理办法
- 2025年高校教师资格证考试题库(附答案)
- 浙江省浙南名校联盟2025-2026学年高二上学期开学返校联考英语试卷(含音频)
- (康德卷) 重庆市2026届高三9月开学考联考英语试卷(含答案解析)
- 绿化施肥基本知识培训课件
- 2025-2026学年人教版(2024)小学美术二年级上册《指尖撕撕乐》教学设计
- 选调生培训课件
- 安全驾驶教育培训课件
- 六年级上册心理健康教育教案-正确认识我自己 北师大版
- 2025北京京剧院招聘10人备考题库及答案解析
评论
0/150
提交评论