shouchengcheng
just do it

今天在酷壳上看到这么一个问题,想了许久无解,最后看大家评论才完全搞懂。

地址在这里:http://coolshell.cn/articles/4429.html

问题如下:

你是山西的一个煤老板,你在矿区开采了有3000吨煤需要运送到市场上去卖,从你的矿区到市场有1000公里,你手里有一列烧煤的火车,这个火车最多只能装1000吨煤,且其能耗比较大——每一公里需要耗一吨煤。请问,作为一个懂编程的煤老板的你,你会怎么运送才能运最多的煤到集市?

一开始我想,一共载1000吨,运到就全部被消耗光了,那还有剩?而且回来也是个问题。

但是如果中间临时来个地方堆一下的话,问题就有点眉目了。但是如何确定停哪里呢?

这个问题最关键之处,我觉得就是如何降低火车返回来运煤的路程。

所以倒着推的话,最理想的就是在运到集市之后不用再返回去运煤了。那么最后那一车就最好是满车启程。

因为初始有3000吨,找个地方放了,来回最少要3趟才能载完。

那么就可以假设火车3趟完之后,回到那个点,总共正好还剩1000吨,然后直接到集市。

这是就要想一下了,如果第一次运完还剩2000吨的话,会不会更好,因为运2000吨只要2趟就可以了,这样就又可以节省一趟的煤。

这样一分析,答案就出来了。我们可以列这么一个公式解出来

假设其实点为A,第一次停车点为B,第二次为C,终点为D

那么根据已知调节,可以得到如下方程:
    AB+BC+CD=1000
    3000-5*AB=2000    //一共3趟,第三趟是没有返回的,故为5
    2000-3*BC=1000    //同上

这么一来剩下的煤的数量就是 (1000-CD) 的值
:)

 

posted on 2014-04-17 10:02  shouchengcheng  阅读(173)  评论(0编辑  收藏  举报