运煤问题

CSDN上发现一个面试题及解法记录如下:

 

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

 

思路:
1.确定到底要运几次.
3次. 3000/1000
前两次有往返 , 第三次直接到目的地。

 

S———————A———————————————B——————————————————E

2.确定每次火车的出发和返回的状态和目的:

2.1第一次出发走SA满载1000,返回不剩煤。SA=x 设第一次出发到达的地点A距起点x公里,目的:在路上消耗往返2x , A地留下第二次往返所需2x和第三次经过时足够支持火车走这段x公里的煤,所以5x=1000,x=200
2.2第二次出发走SB满载1000,返回不剩煤。SB= SA+AB = x + y  设第二次出发到达的地点B距离起点x+y公里,目的:在路上消耗第二次往返和第三次经过时足够支持火车走这段y公里的煤, 所以3y=1000,y约等于333
2.3第三次出发走SE满载1000,SE = 1000=x+y+ BE  直接到目的地E。前x200+y333公里消耗的煤都分别在A点处和B点处补充上了,所以到B时还是满载1000,走完BE 省下 533。

 

以上解还未说明 为什么第一次出发到A时要留下第二次和第三次经过SA时所需的煤,第三次经过SA时所需的煤在第二次出发到A时留下也行的啊!

考虑这点

我的数学公式求法:

 

  5x>=1000;(第一次往返预留后几次的全部所需的煤时 x=200,预留部分以后往返所需的则 X=1000/n(n<5) 则x>200)

  5x+3y =2000; (0<x<400, 0<y<666.6)

   x+y = max? (到B时车上有1000t,且此时BE最短 SA+AB最长)

 

x取值最小时 max 最大

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值