打水问题:排序不等式

来源:百度知道 编辑:UC知道 时间:2024/05/29 05:56:32
高中数学选修4-5上有这么一题:10个人拿水桶打水,设水龙头注满第i个人的水桶需Ti分钟,设时间各不相同,问只有一个水龙头时,如何安排10个人的次序,使他们花费的总时间(包括自己打水+等待时间)最短。
我们可以用排序不等式得出应该排序后小的在前面,使得总时间最短。
现在我们需要探究拓展问题:
当有两个水龙头可用时,如何安排这10个人的顺序呢?
那么,当有n个水龙头可用时又怎么样?

根据我们的探究发现,只有最后打水的人,才不需要别人等待。所以要将最费时的人放在最后面,如果有2个水龙头,即双线程,就安排最后2个人在两个水龙头任意的最尾。接着根据递推得出,分10/2=5批装水能使总时间最少。

以上是我个人的想法,但是还不成形。希望大家一起探究,能有比较完整的解法。另外,本人是信息学奥赛的,本来希望用程序解决以上问题,但是头脑中还没办法构建一个比较好的算法。单纯模拟也不现实。我想这是不是和线段树还有多线程的DP有关?等待回答...
一个比较可行的做法就是大家按从快到慢的顺序排好队,分别在2个水龙头之间,一个龙头空闲便马上补上去,这样能最省时间。
注意,我们算的是总用时。所以不管什么时候结束。这不会有任何影响,其实我们只要Focus on 等待的时间就可以了。

一个比较可行的做法就是大家按从快到慢的顺序排好队,分别在2个水龙头之间,一个龙头空闲便马上补上去,这样能最省时间。
对了 这个方法比较粗糙的最快,
但从精细方面说不是绝对的,比如最后 一个比较大,那么一个最后的时候 一个龙头空, 一个龙头还要好长时间才能完成 ,也不是最科学的。 具体算法现在还没有。 这个在最初就要把方案定好,以免让一个龙门空太长时间