问题描述:
用一辆吉普车穿越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);
}