多做题,通过考试没问题!

算法设计与分析

睦霖题库>大学试题(计算机科学)>算法设计与分析

G先生想独自驾驶汽车从城市A到城市B。从城市A到城市B的距离为d0公里。汽车油箱的容量为c公升。每公升汽油能行驶e公里。出发点每公升汽油的价格为p元。从城市A到城市B沿途有n个加油站。第i个加油站距出发点的距离为di,油价为每公升pi元。请设计一个算法使到G先生旅行的费用最省(这里的旅行费用指的是加油的总花费)。

正确答案: 第一步:判断旅行家能否到达目的地
假设在任一个加油站都加满油,能否到达终点
第二步:预算最少费用
采用贪心算法的思想求解
汽车在到达目的地之前的每一时刻,都必须保证油箱中的汽油足够行驶到下一油站。
如果以p(i)表示第i油站的汽油价格,x(i)表示在第i油站所加汽油的量,总费用为P=∑p(i)*x(i)i=0,1,….,n。
两个城市之间的距离是固定不变的,汽车从出发点到达目的地所需要的汽油总量(即∑x(i)i=0,1,….,n)自然也是固定不变的。
根据使费用最少的求解目标,要使费用函数取得最优值(在此为最小值),必须使p(i)尽可能小:也就是汽车要尽可能在价格便宜的油站加油。
汽车每到达一个油站i(包括出发点第0站,但不包括目的地第n+1站),都要检查是否需要加油。
如果汽车在某个油站i需要加油,那么,就先将该油站的汽油价格p(i)与下一油站的汽油价格p(i+1)进行比较,若p(i)>=p(i+1),加油时,只需保证油箱中的汽油能够到达下一油站(第i+1站)即可;
否则,继续将p(i)与第i+2站的汽油价格p(i+2)进行比较,……
判断是否需要在第i站加油的条件可以确定为:在到达第i站时,汽车油箱中的剩余汽油(用变量rest表示剩余汽油的多少)是否足够行驶到下一更便宜的油站j,即rest*e是否大于或等于d(j)-d(i)。
如果一直找不到比第i个油站更便宜的油站j,则在第i个油站加满油(如果不用加满就已经到了终点,则加油量应该满足刚好到达终点)。
答案解析:
进入题库查看解析

微信扫一扫手机做题