代码改变世界

火车运煤

2011-05-30 13:55  ubunoon  阅读(1373)  评论(7编辑  收藏  举报

群里面一位研二的同学,发了这么一个题目:

在数轴上的0点你有一个煤矿,煤矿里有3000吨煤,在1000公里处有一个市场,你有一辆小火车,小火车的最大载货量是1000吨,小火车本身每走1公里就需要烧1吨煤,并且小火车可以在任意地点卸货或者装货,问你最多可以运多少吨煤到市场。。。。

这个题目不是很难,高三的时候就差不多可以解这个题目了,下面开始分析解题:

首先,将1000吨煤装到小火车上,运行到x1处,将1000-2x1吨卸载下来,然后小火车载着剩下的x1吨煤回到出发点,然后拉上剩下的1000吨煤,继续跑到x1处,又是放下了1000-2x1吨煤,再回来,拉剩下的1000吨煤,注意,这次不需要再回到原点,因此只需要耗费一个x1即可,因此3000吨煤拉到x1点的时候,剩下3000-5(x1-0)吨煤,将剩下的煤拉到x2点,同上面的分析,需要耗费的煤为5*(x2-x1),这儿有一个极限点,那就是到了某个点k的时候,煤就剩下1000吨了,这个时候只能一路拉到市场上去了。

于是有:

3000 - 5 * (x1-0) - 5 * (x2 - x1) - ... - 5(xk - xk-1) = 1000

可以求得xk =  400

总共长度为1000公里,于是求得最多可以拉的煤为 1000 - 400 = 600吨。

这个题目很有趣,即k点前面的n个点,任意一个点卸货装货都无关紧要,唯一需要做的是,拉的足量的煤。

(这个题目是否求解正确,自己也不特别肯定,欢迎指正拍砖)。

网友xray指出,400公里路之后,还有600公里的路,因此要消耗的是600吨煤,剩下的是400吨煤

(都把前面复杂的都分析了,就简单的就分析不了,好囧!)

 后来的分析有些错误,经过网友颜沙提醒,首先拉3000吨的时候,必须要装载3次才能够装载过去,于是就存在了来回两次的问题,但是到了2000吨的时候,只需要装载2次就可以过去了,于是只需要1次来回即可,因此求解为:

3000 - 5 * (x1-0) - 5 * (x2 - x1) - ... - 5(xk - xk-1) = 2000

2000 - 3 *(xk+1-xk) - 3*(xk+2-xk) - ... - 3(xm - xm-1) = 1000

可以求解得到xk = 200, xm = 1000/3

于是就可以剩下的煤为:

1000 - ( 1000 - 200 - 1000/3) = 1600/3吨煤。