- 1、本文档共10页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
动态规划之队列优化
动态规划之队列优化
浙江省镇海中学 贺洪鸣
【例1锯木场选址】(CEOI2004)
从山顶上到山底下沿着种植了n棵树。当地的政府决定把他们砍下来。为了不浪费任何一棵木材,树被砍倒后要运送到锯木厂。木材只能按照一个方向运输:朝山下运。山脚下有一个锯木厂。另外两个锯木厂将新修建在山路上。你必须决定在哪里修建两个锯木厂,使得传输的费用最小。运输每公斤每米需要一分钱。任务你的任务是写一个程序:
从标准输入读入树的个数和他们的重量位置
计算最小运输费用
将计算结果输出到标准输出
输入输入的第一行为一个正整数n——树的个数(2≤n≤20 000)。树从山顶到山脚按照1,2……n标号。接下来n行,每行有两个正整数(用空格分开)。第i+1行含有:i——第i棵树的重量(公斤为单位)和 di——第i棵树和第i+1棵树之间的距离,1≤i ≤10 000,0≤di≤10 000。最后一个数d,表示第n棵树到山脚的锯木厂的距离。保证所有树运到山脚的锯木厂所需要的费用小于2000 000 000分。
输出输出只有一行一个数:最小的运输费用。9
1 2
2 1
3 3
1 1
3 2
1 6
2 1
1 2
1 1
在解决这一问题时,首先我们要明确,将锯木厂建立在相邻两棵树之间是没有任何意义的,否则我们可以将这样的锯木厂上移到最近的一棵树处,此时运送上方树木的费用减少,运送下方树木的费用没有变化,总费用降低。
为了方便讨论,我们先作如下定义:
假设山脚锯木场处也有一棵树,编号为,并且v[n+1]=d[n+1]=0。
表示第1棵树到第棵树的质量和,即。
表示第1棵树到第棵树的距离,即。特别的,有,表示第1棵树到自己的距离为0。
c[i]表示在第棵树处建一个锯木厂棵树处建一个锯木场,并且将第j到第i棵树全部运往这个锯木场所需的费用。则w[j,i]=c[i]-c[j-1]-sumw[j-1]*(sumd[i]-sumd[j-1])。特别的,当i=j时w[j,i]=0。
综上可知,求出所有sumw[i],sumd[i]与c[i]的时间复杂度为O(n),此后求任意w[j,i]的时间复杂度都为O(1)。
设f[i]表示在第i棵树处建立第二个锯木场的最小费用,则有。直接用这个式子计算的时间复杂度为,由于问题规模太大,直接使用这一算法必然超时,因此我们必须对算法进行优化。在讨论如何进行优化以前,我们首先证明下面这一猜想。
[猜想]
如果在位置建设第二个锯木,第一个锯木的位置是时最优那么如果在位置建设锯木,第一个锯木
即求f[i+1]时,决策k比决策j来得差!因此,当f[i]的第一个最佳决策为j时,f[i+1]的第一个最优决策必大于等于j!
证毕!
【算法的改进】
令s[k,i]表示决策变量取k时f[i]的值,即s[k,i]=c[k]+w[k+1,i]+w[i+1,n+1]。
设k1k2,则有s[k1,i]-s[k2,i]
=(c[k1]+w[k1+1,i]+w[i+1,n+1])-(c[k2]+w[k2+1,i]+w[i+1,n+1])
=(c[k1]+c[i]-c[k1]-sumw[k1]*(sumd[i]-sumd[k1])
- (c[k2]+c[i]-c[k2]-sumw[k2]*(sumd[i]-sumd[k2])
=sumw[k2]*(sumd[i]-sumd[k2])- sumw[k1]*(sumd[i]-sumd[k1])
=sumd[i](sumw[k2]-sumw[k1])-(sumw[k2]*sumd[k2]-sumw[k1]*sumd[k1])
若s[k1,i]-s[k2,i]0,则有:
sumd[i](sumw[k2]-sumw[k1])(sumw[k2]*sumd[k2]-sumw[k1]*sumd[k1])
即(sumw[k2]*sumd[k2]-sumw[k1]*sumd[k1])/ (sumw[k2]-sumw[k1]) sumd[i]
或(sumw[k1]*sumd[k1]-sumw[k2]*sumd[k2])/ (sumw[k1]-sumw[k2]) sumd[i]
我们令g[k1,k2]=不等式左边,当g[k1,k2]sumd[i]时s[k1,i]-s[k2,i]0。
由上面已经证明的猜想,说明决策变量j是单调的,(即f[i+1]的决策j2必大于等于f[i]时的决策j1)此时问题就好解决了。我们可以维护一个特殊的队列k,这个队列只能从队尾插入,但是可以从两端删除。这个队列满足k1k2k3…kp以及g[k1,k2]g[k2,k3]…g[kp-1,kp]。
1.计算状态f[i]前,若g[k1,k2]sumd[i],表示s[k1,i]-s[k2,i]0,即决策k1没有k2优,应当删除队
您可能关注的文档
- 【精品】2011届高三英语二轮复习(鲁、津专用)精品考前特训 考前第27天.ppt
- 最全最实用地质年代表A3.doc
- Part One-Chapter5 -Double layer-Chen SL 14-15.ppt
- unit3金融英语.ppt
- 汉英笔译必备句型.pptx
- 古生物各论复习.doc
- 精读英语第三课PPT词汇解析.pptx
- 管理经济学讲义5.ppt
- 第二章 国际贸易的微观基础(一).ppt
- 地质年代表1(较新).doc
- 四川省德阳市罗江中学2025届高三考前热身化学试卷含解析.doc
- 山东省枣庄现代实验学校2025届高三下学期第五次调研考试化学试题含解析.doc
- 吉林省长春市十一高中等九校教育联盟2025届高三一诊考试生物试卷含解析.doc
- 2025届江苏省盐城市伍佑中学高考仿真模拟化学试卷含解析.doc
- 2025届广西贺州中学高考冲刺押题(最后一卷)生物试卷含解析.doc
- 安徽省池州市贵池区2025届高三第一次模拟考试生物试卷含解析.doc
- 宁夏银川一中2025届高三(最后冲刺)化学试卷含解析.doc
- 广东省广州市增城区四校联考2025届高考压轴卷化学试卷含解析.doc
- 2025届邯郸市第一中学高考生物必刷试卷含解析.doc
- 2025届安徽省安庆市石化第一中学高考仿真卷化学试卷含解析.doc
文档评论(0)