2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule
双调欧几里得旅行商问题是一个经典动态规划问题。《算法导论(第二版)》思考题15-1和北京大学OJ2677都出现了这个题目。
旅行商问题描写叙述:平面上n个点,确定一条连接各点的最短闭合旅程。
这个解的一般形式为NP的(在多项式时间内能够求出)
J.L. Bentley 建议通过仅仅考虑双调旅程(bitonictour)来简化问题,这样的旅程即为从最左点開始。严格地从左到右直至最右点,然后严格地从右到左直至出发点。
下图(b)显示了相同的7个点的最短双调路线。在这样的情况下。多项式的算法是可能的。其实,存在确定的最优双调路线的O(n*n)时间的算法。

上图中,a是最短闭合路线。这个路线不是双调的。
b是最短双调闭合路线。
求解过程:
(1)首先将各点依照x坐标从小到大排列,时间复杂度为O(nlgn)。
(2)寻找子结构:定义从Pi到Pj的路径为:从Pi開始,从右到左一直到P1,然后从左到右一直到Pj。在这个路径上,会经过P1到Pmax(i,j)之间的全部点且仅仅经过一次。
在定义d(i,j)为满足这一条件的最短路径。
我们仅仅考虑i>=j的情况。
同一时候,定义dist(i,j)为点Pi到Pj之间的直线距离。
(3)最优解:我们须要求的是d(n,n)。
关于子问题d(i,j)的求解。分三种情况:
A、当j < i - 1时,d(i,j) = d(i-1,j) + dist(i - 1,i)。
由定义可知,点Pi-1一定在路径Pi-Pj上,并且又因为j<i-1,因此Pi的左边的相邻点一定是Pi-1.因此能够得出上述等式。
B、当j = i - 1时,与Pi左相邻的那个点可能是P1到Pi-1总的不论什么一个。因此须要递归求出最小的那个路径:
d(i,j) = d(i,i-1) = min{d(k,j) + dist(i,k)},当中1 <= k <= j。
C、当j=i时,路径上最后相连的两个点可能是P1-Pi、P2-Pi...Pi-1-Pi。
因此有:
d(i,i) = min{d(i,1)+dist(1,i),...,d(i,i-1),dist(i-1,i)}.。
小记:这题之前分析是哈密顿回路。旅行商问题即是。
可是没去百度了,如今百度出来了。參考
2014年百度之星程序设计大赛 - 资格赛 第二题 Disk Schedule的更多相关文章
- 2014年百度之星程序设计大赛 资格赛第一题 (longlong)
解题思路: 只要看(A-V)*K 这个公式的更新值是否大于等于A ,大于的话继续循环,否则报错 注意一点,数据会爆int WA代码: #include<stdio.h> int main( ...
- 2014年百度之星程序设计大赛 - 资格赛 第一题 Energy Conversion
小记:long long %I64d 代码: #include <iostream> #include <stdio.h> #include <string.h> ...
- hdu 4825 Xor Sum (建树) 2014年百度之星程序设计大赛 - 资格赛 1003
题目 题意:给n个数,m次询问,每次给一个数,求这n个数里与这个数 异或 最大的数. 思路:建一个类似字典数的数,把每一个数用 32位的0或者1 表示,查找从高位向底位找,优先找不同的,如果没有不同的 ...
- 2014年百度之星程序设计大赛 - 资格赛 1004 Labyrinth(Dp)
题目链接 题目: Labyrinth Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- 2014年百度之星程序设计大赛 - 资格赛 第三题 Xor Sum
小记:艹蛋呢, 取long long的低30,32,34位都WA, 取31位才AC. .. 思路:依据求数组中两个数异或最大值.參考 代码: #include <stdio.h> #inc ...
- 2014年百度之星程序设计大赛 - 资格赛 1002 Disk Schedule(双调欧几里得旅行商问题)
Problem Description 有非常多从磁盘读取数据的需求,包含顺序读取.随机读取.为了提高效率,须要人为安排磁盘读取.然而,在现实中,这样的做法非常复杂.我们考虑一个相对简单的场景.磁盘有 ...
- 2014年百度之星程序设计大赛 - 资格赛 1001 Energy Conversion
版权声明:本文为博主原创文章.未经博主同意不得转载. https://blog.csdn.net/sr19930829/article/details/26003661 Energy Conversi ...
- hdu 6082 度度熊与邪恶大魔王(2017"百度之星"程序设计大赛 - 资格赛 )
度度熊与邪恶大魔王 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- 2017"百度之星"程序设计大赛 - 资格赛【1001 Floyd求最小环 1002 歪解(并查集),1003 完全背包 1004 01背包 1005 打表找规律+卡特兰数】
度度熊保护村庄 Accepts: 13 Submissions: 488 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/3276 ...
随机推荐
- TPersistent的三个用途(读写DFM文件,Assign,RTTI),最主要还是第三个用途
不是什么类对象都需要RTTI,如果把它放在TObject,除了增加可执行文件的大小以及运行内存空间以外,没什么好处.
- boost ini
#include <boost/property_tree/ptree.hpp>#include <boost/property_tree/ini_parser.hpp> .. ...
- 瑞蓝RL-NDVM-A16网络视频解码器 视频上墙解决方案专家--数字视频解码矩阵
瑞蓝网络数字视频解码矩阵(简称RL-NDVM)是依据第三代开放式网络视频监控系统的实际需求,专为视频上墙显示而研制的一款新型数字解码上墙设备.RL-NDVM解码矩阵是集解码器和HDMI/DVI/VGA ...
- 生成awr报告
主要参考文献: http://343766868.blog.163.com/blog/static/48314056201110124513396/ 概况 Oracle内部以一定的频率把系统关键的统计 ...
- Swift - 通过设置视图的transform属性实现动画
设置视图对象的transform属性,可以实现各种动画效果. 1,移动 指在同一平面内,将控件按照某个直线方向平移一定的距离. 1 2 3 4 5 //每次都从当前位置平移 self.imageVie ...
- 服务确定撤销/删除/关闭 (ml81n)
FUNCTION zrfc_mm006. *"---------------------------------------------------------------------- * ...
- Java内部类——成员内部类
成员内部类的意思就是,一个外层类里面包含着一个非static的class,举例如下: class OuterClass { //变量,函数定义... class InnerClass { //变量,函 ...
- entity framework 6 我写了一个公用数据类
public class BaseDAL { string strConn = ""; public BaseDAL(string connString) { strConn = ...
- linux编程掌握常用命令
1)编译应用程序 make -f makefile_5_2 clean make -f makefile_5_2 2)关于共享目录 在linux虚拟机的/mnt/hgfs下可看到该文件夹 3)cd命令 ...
- 【app】遍历目录所有文件
遍历目录所有文件 原创,转载时请注明,谢谢.邮箱:tangzhongp@163.com 博客园地址:http://www.cnblogs.com/embedded-tzp Csdn博客地址:htt ...