动态规划-航线设置

问题描述:美丽的莱茵河畔,每边都分布着N个城市,两边的城市都是唯一对应的友好城市,现需要在友好城市开通航线以加强往来.但因为莱茵河常年大雾,如果开设的航线发生交叉现象就有可能出现碰船的现象.现在要求近可能多地开通航线并且使航线不能相交!

假如你是一个才华横溢的设计师,该如何设置友好城市间的航线使的航线数又最大又不相交呢?

分析:此问题可以演化成求最大不下降序列来完成.源程序如下:

program dongtai; {动态规划之友好城市航线设置问题}
var
 d:array[1..1000,1..4] of integer;
 i,j,k,n,L,p:integer;

 procedure print(L:integer); {打印结果}
 begin
 writeLn('最多可设置的航线数是 : ',k);
 repeat
 writeLn(d[L,1]:4,d[L,2]:4); {输出可以设置航线的友好城市代码}
 L:=d[L,4]
 untiL L=0
 end;

begin
 writeLn('输入友好城市对数: ');
 readLn(n);
 writeLn('输入友好城市对(友好城市放在同一行:'); {输入}
 for i:=1 to n do
 readLn(d[i,1],d[i,2]); {D[I,1]表示起点,D[I,2]表示终点}
 for i:=1 to n do
 begin
 d[i,3]:=1; {D[I,3]表示可以设置的航线条数}
 d[i,4]:=0 {D[I,4]表示后继,即下一条航线从哪里开始设置,为0表示不能设置下一条航线}
 end;
for i:=n-1 downto 1 do {从倒数第二个城市开始规划}
 begin
 L:=0; p:=0; {L表示本城市后面可以设置的航线数,P表示下条航线从哪个城市开始}
 for j:=i+1 to n do {找出本城市后面可以设置的最大航线数和小条航线到底从哪个城市开始设置}
 if (d[i,2] L) then 
 {如果本城市I的终点小于后面城市的终点(即不相交)} {并且此城市后面可以设置的航线数大于L}
 begin
 L:=d[j,3]; {那么L等于城市J的可以设置航线数}
 p:=j {P等于可以设置下条航线的城市代码}
 end;
 if L>0 then {如果本城市后面总共可以设置的航线数>0则}
 begin
 d[i,3]:=L+1; {本城市可以设置的航线数在下个城市可以设置航线数的基础上加1}
 d[i,4]:=p {D[I,4]等于本城市后续城市的代码}
 end
 end;
 k:=d[1,3]; {K为可以设置最大航线数,假设初值为第一个城市可以设置的航线数}
 L:=1; {L为城市代码,初值为第一个城市}
 for i:=2 to n do {找出可以设置航线的最大值,赋值给K,同时L记下哪个可以设置最大航线数的城市代码}
 if d[i,3]>k then
 begin
 k:=d[i,3];
 L:=i
 end;
 for i:=1 to n do {打印结果,因为有可能有多种方案,所以只要哪个城市可以设置的航线数等于最大值K就打印结果}
 if d[i,3]=k then print(i)

end.

时间: 2024-11-15 10:56:18

动态规划-航线设置的相关文章

国航的反传统绿色服务

□ 记者 吴丽 航空公司是我国传统的垄断性行业.经历多轮重组后,航空业的服务意识和水平有了明显提高,但与国外航空公司相比,软性的服务,特别是用户体验上的服务水平一直停滞不前.而这其中,绿色服务又是航空业越来越强调的软实力.对于这个国内航空公司普遍的软肋,作为行业老大,中国国际航空公司正在践行着"由己及人"的绿色服务创新. 国航最初的绿色服务理念,是把节油减排作为可持续发展的突破口,推进"绿色飞行". 在大中型飞机上和大型直升机上,为了减少对地面(机场)供电设备的依赖

通过金矿模型介绍动态规划

前面讲到了动态规划问题,在cnblogs上看到了一篇讲解动态规划的文章,十分有新意,故转载过来. 第一节  初识动态规划         经典的01背包问题是这样的:        有一个包和n个物品,包的容量为m,每个物品都有各自的体积和价值,问当从这n个物品中选择多个物品放在包里而物品体积总数不超过包的容量m时,能够得到的最大价值是多少?[对于每个物品不可以取多次,最多只能取一次,之所以叫做01背包,0表示不取,1表示取]        为了用一种生动又更形象的方式来讲解此题,我把此题用另一

c语言 算法-动态规划-车辆过桥问题

问题描述 动态规划-车辆过桥问题 有N辆车要按顺序通过一个单向的小桥,由于小桥太窄,不能有两辆车并排通过,因此在桥上不能超车,另外,由于小桥建造的时间已经很久,只能承受有限的重量,记为Max(吨),即任意时刻在桥上行驶的总重量不能超过Max(吨).因此车辆在过桥的时候必须要有控制,需将这N辆车按初始的顺序分组,每次让一个组过桥,并且只有在一个组中所有的车辆全部过桥后才让下一组车辆上桥.现已知每辆车的重量和最大速度,而每组车的过桥时间由该组中速度最慢的那辆车决定.现请设计程序,将这N辆车分组,使得

界面-QT creator 如何设置断点?

问题描述 QT creator 如何设置断点? 本人第一次接触QT.一个程序,点击button后进入我的函数,并输出结果到textedit.要求用暴力和动态规划,动态规划已经成功,但暴力点button后没有反应,并且出现(无响应),只能退出.我想设置断点,在某行加入断点,旁边有红点,但是执行时候依然无响应,并且我没有看到断点输出的信息啊?输出到哪里了? 而且,我的暴力的算法应该没有问题,我是先在VS上调试成功才用的QT加界面. 另外有木有空闲的大神能留下联系方式 T T 课程设计比较急,能帮我看

【算法导论】动态规划之最优二叉查找树

        如果我们想写一个单词查询的软件的话,我们的目的就是让查询的总时间最短,我们首先想到用之前的二叉查找树.我们可以用红黑树或者其它的平衡二叉树来保证每个单词的搜索时间.但是每个单词出现的频率一般不同,因此我们希望把频率较大的单词放在离根比较近的地方,频率较小的放在离叶子较近的地方.而且,我们所要查询的单词词库中没有,这也值得考虑.                        由上文可知,ki表示单词,di表示不能查到的情况.由上面的例子可知,一棵最优二叉树不一定是高度最小的树.我们

《算法技术手册》一3.6.3 动态规划

3.6.3 动态规划 动态规划是分治算法的一个衍生,它将一个问题切分成多个更加简单的子问题,然后按照顺序逐个解决.对于每个子问题,它只求解一次,然后将结果存储起来以供后续使用,这样可以避免重复计算.此外,动态规划在计算当前解时,会结合较小规模的子问题的解,并且不断增加子问题的规模.很多情况下,最终计算出来的解即为全局最优解.动态规划常用于求解最值优化类问题上.下面通过一个示例来阐释动态规划算法.科学家经常通过比对DNA序列来确定其相似性.现有这样一个DNA序列--由A.C.T.G所组成.因此,一

[手把手]教你绘制全球热门航线和客流分布图

摘要:这张地图描绘了一些目前最热门的民航线路,每条线路都用不同的颜色和宽度表示出了最近一年有多少乘客往返于这两个机场之间. 数据收集 当我开始收集用于这张地图的数据时,我知道并不是所有的机场都在它的维基百科页面上公布了它和不同目的地之间往返的乘客数目.但我也不确定是否可以根据其他机场给出的乘客数目来填补这些空缺. 莫斯科的两大机场,谢列梅捷沃国际机场(Sheremetyevo)和多莫杰多沃国际机场(Domodedovo)都没有在维基百科中公布在它们和一些热门目的地之间往返的乘客数目.但是曼谷(B

南航在广州、北京、乌鲁木齐三大门户枢纽机场设置24小时中转服务柜台

http://www.aliyun.com/zixun/aggregation/1459.html">中国南航湖北分公司总经理孙建华20日表示,南航在广州.北京.乌鲁木齐三大门户枢纽机场设置了24小时中转服务柜台,借助南航及天合联盟密集航线网络,湖北及华中地区旅客可便捷通达全球173个国家和地区的926个目的地. 当天,美.法两国驻武汉领事馆,加拿大.澳大利亚.荷兰等国驻武汉办事机构,世界500强在鄂投资企业,湖北省外事侨务办公室负责人,南航湖北分公司等单位代表汇聚一堂,共话支持中部经济跨

Android Studio 在 win7 下的安装和设置

首先完成android studio下载 http://developer.android.com/sdk/installing/studio.html 其次下载jdk1.7.0_01,并且完成安装: 下面开始进行安装和设置: 由于studio支持系统位数是64位,而我自己所用电脑是32位的,所以安装完成以后出现启动不了,解决方法如下: 用文本工具打开studio.bat 其中找到 SET BITS=IF EXIST "%JRE%\lib\amd64" SET BITS=64 把IF