试题详情
- 简答题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个油站加满油(如果不用加满就已经到了终点,则加油量应该满足刚好到达终点)。 关注下方微信公众号,在线模考后查看
热门试题
- 设有n个顾客同时等待一项服务,顾客i需要
- 循环控制组成要素包含有()
- 背包问题的贪心算法所需的计算时间为()
- 汉诺塔的时间复杂度从阶梯来讲,属于指数阶
- 函数自身调用自身,称之为递归调用。
- 数据结构与算法里,for循环的三个表达式
- 二分搜索算法是利用()实现的算法。
- 下列算法中通常以自顶向下的方式求解最优解
- while循环小括号的表达式类型可以是(
- θ记号在算法复杂性的表示法中表示()
- 简单选择排序每趟排序最多只有一次记录交换
- while是实现循环结构,do..whi
- 若线性规划问题存在最优解,它一定不在()
- 数据结构与算法中,在排序中,对于关键字相
- 关于0-1背包问题以下描述正确的是()
- 数据结构中,二叉排序树可以为空二叉排序树
- 有若干只鸡兔同在一个笼子里,从上面数,有
- 从活结点表中选择下一个扩展结点的不同方式
- 实现合并排序利用的算法是()。
- 简述用计算机求解问题的步骤。