刷题刷出新高度,偷偷领先!偷偷领先!偷偷领先! 关注我们,悄悄成为最优秀的自己!

简答题

月球疏散行动

时间限制: 1000MS

内存限制: 65536KB

题目描述:

为了避免太阳爆发引起的灾难,人类决定给地球装上发动机,最终逃离太阳系。原计划要带着月球一起走,结果月球行星发动机发生灾难性故障,必须炸毁月球。为此,在月球上的工作人员都要疏散回地球。

月球基地有一艘太空穿梭机可以用来疏散工作人员。但是人们分散在各处,必须前往基地集合,他们到达基地的时间不等。穿梭机可以将抵达基地等待登机的工作人员先送回地球,然后再返回基地疏散下一批工作人员。

总共有N名工作人员需要疏散,太空穿梭机从月球到地球往返一次花时间M小时,第i个人抵达基地等待登机的时刻为Ti。

指挥官希望所有工作人员在基地等待的时间总和最小,而且他可以任意安排穿梭机的起飞时间,假定穿梭机足够大,可以装下所有工作人员,在不计登机和下机时间等因素的情况下,最小的等候时间总和是多少?

例如:N=5,M=4,1号~5号工作人员到达基地的时刻依次为11、3、3、5、10,

穿梭机可以在3时出发,先送2号、3号工作人员去地球,然后于7时返回月球基地;

此时,4号工作人员已于5时到达基地,等候了2小时。这时让穿梭机马上送走他,然后于11时从地球返回基地;

此时,5号工作人员已于10时到达基地,等候了1小时;

而1号工作人员刚好于11时到达基地,等候0小时;

穿梭机于11时将两人送走,即完成全部疏散任务。总的等候时间=4号工作人员等候时间+5号工作人员等候时间=2+1=3小时。

无法再找到有更小等候时间总和的方案。

输入描述

第一行输入两个正整数N(1≤N≤500),M(1≤M≤100),以一个空格隔开,分别表示工作人员人数和穿梭机的往返时间

第二行输入N个正整数,依次表示某个工作人员到达基地等候登机的时刻Ti(1≤Ti≤4000000),相邻两数之间用一个空格隔开

输出描述

输出一个整数,表示所有工作人员等候时间之和的最小值(单位:小时)


样例输入

5 4
11 3 3 5 10

样例输出

3

使用微信搜索喵呜刷题,轻松应对考试!

答案:

3

解析:

【喵呜刷题小喵解析】:对于这个问题,我们需要找到一个最优的穿梭机起飞时间,使得所有工作人员在基地等待的时间总和最小。为了解决这个问题,我们可以使用贪心算法。

首先,将工作人员的到达时间按照升序进行排序。然后,我们可以遍历这个排序后的列表,并使用一个变量来跟踪当前的等待时间。开始时,等待时间为0。

接下来,对于列表中的每个工作人员,我们可以选择立即让穿梭机送他们回地球,或者让他们在基地等待下一趟穿梭机。为了让等待时间最小,我们应该让穿梭机立即送他们回地球,然后计算新的等待时间。新的等待时间应该是当前的等待时间加上工作人员等待穿梭机的时间(从他们到达基地到穿梭机再次到达基地的时间)。

然后,我们可以更新等待时间为新的等待时间和当前工作人员的等待时间中的较大值。这是因为,如果当前工作人员的等待时间已经超过了当前的等待时间,那么让穿梭机立即送他们回地球并不能减少总的等待时间。

最后,我们返回等待时间作为结果。这就是所有工作人员在基地等待的时间总和的最小值。

在这个例子中,工作人员按照到达时间排序后是3,3,5,10,11。我们可以让穿梭机在3时出发,先送2号、3号工作人员去地球,然后于7时返回月球基地。此时,4号工作人员已于5时到达基地,等候了2小时。这时让穿梭机马上送走他,然后于11时从地球返回基地。此时,5号工作人员已于10时到达基地,等候了1小时;而1号工作人员刚好于11时到达基地,等候0小时。穿梭机于11时将两人送走,即完成全部疏散任务。总的等候时间=4号工作人员等候时间+5号工作人员等候时间=2+1=3小时。无法再找到有更小等候时间总和的方案。
创作类型:
原创

本文链接:月球疏散行动 时间限制: 1000MS 内存限制: 65536KB 题目描述: 为了避免太阳爆发引起

版权声明:本站点所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明文章出处。

让学习像火箭一样快速,微信扫码,获取考试解析、体验刷题服务,开启你的学习加速器!

分享考题
share