首页 > 试题广场 >

你是山西的一个煤老板,你在矿山区开采了有3000吨煤需要运送

[问答题]
你是山西的一个煤老板,你在矿山区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大-每一公里需要耗一顿煤,请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市。
 
首先到达终点的煤肯定是小于1000的,因为一次最多也只能运1000,更何况还要考虑路上的消耗。
所以总体思路是路上有若干中转地点,将煤一步一步搬向终点。
因为不考虑负重的消耗,所以每一次出发运煤肯定是满负载(1000吨),只是运多远的问题。

那么首先需要将3000吨的煤搬离初始地点,这3000吨的煤有的放在中转地点1,有的烧掉了。
所以应该搬多少次呢?可见3000/1000 = 3,至少离开三次才能搬走3000吨煤。
离开三次也就是回来了两次,即三去两回设起点到中转地点1的距离为x,那么此时煤还剩 3000-5x 吨。

如果只有这一个中转地点,最终肯定是火车载着1000吨煤到达终点效率最高,即一去,多了也运不了(无论还差多少公里路)
这里算一下就可以知道我们还是需要加一个中转地点2

还是因为考虑到火车的运载能力,并且应该尽可能少地往返,所以需要两次运输,即两去一回,设两个中转地点之间的距离为y,那么消耗为3y,剩余3000-5x-3y。

因为最后一站就是一去,只要前两站的距离确定了,最后一程自然确定,所以不必考虑最后一程的消耗,只要3000-5x-3y  <= 1000,能满足一去就行。

前两站满足关系
5x+3y>=2000 (这样最后一站才可能一去
5x>=1000 (这样从中转站1开始才可能两去一回

解得x=200,y=333

答案533
编辑于 2017-03-17 16:41:05 回复(2)
首先需要明确: 1.如果需要将总量为sum的货物从地点start运到地点end,并且存在某个中间中转点mid使得货物量降至1000,那么将货物最优运到中转点,再直接一趟运输到终点end就是最优解 2.如何最优将sum降至1000?我们注意到该过程消耗的货物量是一定的(sum-1000),而消耗量=该过程来回次数×距离。因此我们要做的是尽可能减小来回次数,从而增大当前运输距离(注意到上面第一点中最后剩余货物值=1000-最后一趟的距离)。 3.来回次数怎么减小呢?(下方**...**重点)注意到货车运载量一定。我们思考是不是可以再添加中转点**将货物总重量降下来**从而来降低次数呢?举例说明,对于a点(总量3000)运输至b点(1000),直接运输的话需要从a点出发3次到b点,来回一共5趟,所走距离为2000/5=400。而添加中转点c(**从c出发次数应该比之前少1 所以c点总量最大应为2000**):a点出发3次到c点(来回5趟),距离(3000-2000)/5=200,从c点出发2次(来回共3趟),距离为(2000-1000)/3=333.3。总距离200+333.3>400。 因此结果为: 1000-(1000-(200+333.3)) =533.3
发表于 2020-11-19 06:12:49 回复(1)
因为煤总量超过承重,需要中转点。为了运吨煤,先尽量满载,然后尽量多中转点。策略是倒数第一中转点到终点前是1次满载。倒数第二中转点到倒数第一中转点前是2次满载。倒数第三中转点到倒数第二中转点前是3次满载。 3000吨煤需要运3次,因此需要中转点是两次。 第一个中转点距离x,来回路程5x,一共消耗一车煤1000吨,解x=200。第二个中转点离第一个距离y,来回3次,一共消耗一车煤1000吨,解y=333。剩下路程是1000-x-y=467,满载出发,因此到达终点是467吨煤。
发表于 2019-12-11 13:33:42 回复(0)