网友的解答:
这个题目是用倒推法,我也是只看了看算法而已.因为我刚刚开始学习C,2个月水平有限,呵呵,先卖弄了.
从终点到起点1K公里.
我门从终点开始考虑,
也就是把终点到起点是:
I0……I1……I2……In
首先我们考虑是从I1到I0需要的油是500公升,也就是我门在I1的位置存放500公升的汽油才能保证车子到终点。
我门把两个I之间的距离写为S[i],耗油量为V[i];
这样第一步我们知道了I0……I1之间
S1=500公里,V1=500公升。
下一步,从I1……I2之间,我们必须至少要从I2处向I1开两趟车子(单向)才能保证I1处的储存量500公升。
这样因为我们是从I2开向I1处,所以,来回加(双向)在一起应该至少是3趟才能保证I1处有500公升的汽油。
能保证3次往返最低的耗油量就是500公升,
那么我们来求出3次往返的500公升耗油量的距离就是:S2=500
/
3。
I0……I2的距离就是:S1+S2=500+500/3
而同时在I2处的储存油量为:V2=500公升+500公升=1000公升
继续向下考虑,从I2……I3之间,保证I2处有1000公升的汽油,我门必须要卡车最少从I3向I2开3趟(单趟),来回就是5趟。路上的耗油量是500公升,也就是我门在I3处存放1500公升汽油。
那么我们来回的距离是:S3=500/5。
I0……I3的距离是:S1+S2+S3=500+500/2+500/3。
同时I3的储存油量是:1500公升。
由此推断:
如果需要i处储存油,那么要i*500的储存量。
车子从i+1到I处(单向)的至少要i次。加上返回的次数一共是2*i—1次。
而这2*i—1次的最小耗油量是500公升。
那么Si的距离就是500/(2*i—1)。
最后i=n到开始地点的
距离是1000-sum(Sn)
(i为1、2、……求他们的和,也就是前面的总路程。)
储存油:n*500。
车子至少要从起点开n+1次满油到n处。加上返回的,一共是2n+1次。
我们2n+1次的耗油量是(1000-sum(Sn))*(2n+1)
[注:就是距离*往返次数=500和前面的500/往返次数=距离是一样的。]
我们起点的油量Vn+(1000-sum(Sn))*(2n+1)。
Vn就是从n点到终点I0总的需求油量。