您的位置:首页 > 其它

problem A

2016-03-23 09:55 183 查看
著名的ACM公司租了一栋建筑的一楼用来办公,楼层形状如下。

Room

1

Room

3

Room

5

。。。

Room

397

Room

399

 

Room

2

Room

4

Room

6

。。。

Room

398

Room

400

这层楼南北各200间房分布在走廊的两侧,最近这个公司想要改革制度,这项改革包括在房间之间移动很多桌子。因为走廊很窄桌子很大,所以某一时刻只有一张桌子能通过走廊。需要算法使桌子在房间之间高效地移动,经理想出了以下方案:移动一张桌子从一个房间到另一个房间至少需要10分钟,当从房间i向房间j移动桌子时,房间i到房间j之间的走廊就被占用了。所以,在10分钟之内,两房间之间的任何桌子移动都是不被允许的,为了使问题明确,经理举例说明了同时移动的可能情形和不可能情况。

 

Table moving

原因

可能情况

房间30到50和房间60到90

没有共享走廊

房间11到12和房间14到13

没有共享走廊

不可能情况

房间20到40和房间31到80

房间31到40前面的走廊被共享

房间1到4和房间3到6

房间3到4前面的走廊被共享

房间2到8和房间7到10

房间7到8前面的走廊被共享

对于每个房间,最多有一张桌子被移入或移出。现在经理寻要找到了一种方法在最短的时间内移动所有的桌子,你的任务是写一个算法去解决经理的问题。

输入:

输入包含T组测试数据,T在输入的第一行被给出。每一组测试数据以一行正整数N开始,1<=N<=200,N代表移动桌子的数目,每一个N后面跟着两个位置整数s和t,代表桌子从房间s移动到房间t(在一个N后面每一个房间的号码最多出现一次),从第N+3行开始剩余的测试案例用像上面同样的方式列出即可。

输出:

输出应包含使移动桌子任务完成的最小时间,每个一行。

样例输入:

3

4

10  20

30  40

50  60

70  80

2

1  3

2  200

3

10  100

20  80

30  50

样例输出:

10

20

30

 

 

贪心算法步骤

1.写一个struct类型的数据结构

2写cmp函数

3while输入

4排序函数

5for循环判断相容性

6输出

经过分析后,此题与活动安排问题相似。此题的房间i和房间j,相当于活动安排问题的起始时间s和结束时间f,两者的区别是对两段重叠后的处理,前者对于重叠的是保留且计数,后者只对不重叠的部分保留。

觉得这样的题都可以转换成带有开始和结束的段。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: