算法设计与分析--穿越沙漠问题(倒推法)

问题描述:

       用一辆吉普车穿越1000公里的沙漠。吉普车的总装油量为500加仑,耗油率为1加仑/公里。由于沙漠中没有油库,必须先用这辆车在沙漠中建立临时油库。该吉普车以最少的耗油量穿越沙漠,应在什么地方建油库,以及各处的贮油量。

1、问题分析

贮油点问题要求要以最少的耗油量穿越沙漠,即到达终点时,沙漠中的各临时油库和车的装油量均为0。这样只能从终点开始向前倒着推解贮油点和贮油量。

2、数学模型

根据耗油量最少目标的分析,下面从后向前分段讨论。

第一段长度为500公里且第一个加油点贮油为500加仑。

第二段中为了贮备油,吉普车在这段的行程必须有往返。

3、下面讨论怎样走效率高

1)首先不计方向这段应走奇数次 (保证最后向前走)

2)每次向前行进时吉普车是满载。

3)要能贮存够下一加油点的贮油量,路上耗油又最少。

发现规律:

贮油点的贮油量:500k(k表示贮油点从后到前的序号)

贮油点离终点的距离:dis=dis+500/(2*k-1);

4、伪代码

desert ( )

{ int dis, k, oil;    //dis表示距终点的距离,k表示贮油点从后到前的序号

dis=500;k=1;oil=500: //原始数值

//先执行do,再判断距离是否超过路径长1000;未超过,继续执行do

do{

print(“storepoint”,k,”distance’, 1000-dis,’oilquantity’, oil);

k=k+1;

dis=dis+500/(2*k-1);

oil= 500*k;

}while ( dis<1000)

oi1=500*k +(1000-dis)*( 2*k-1) ;//减多出来的部分的油

print(“storepoint’,k,"distance’, 0,”oilquantity’, oil);

}

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值