场景一、一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。应在哪些加油站停靠加油,使沿途加油次数最少。
汽车行驶过程中,不到万不得已不加油,应走到自己能走到并且离自己最远的那个加油站,在那个站加满油后,将那个加油站作为新的起点,再按照同样的方法递归下去。
场景二、在一个固定长度的路线上,有多个加油站,而且各个加油站的油价不总是相同,现让油箱为空的一辆车行驶完这条路线,怎样能使所花费的油钱最少。
汽车到一个加油站,可能有以下几种状态:
1.油箱中还有油,这是已经花出去的钱,无法改变,所以要充分利用这些油,看看能不能在油花完之前找到更低价的站。如果有比当前站更低价的,就开过去;否则,只能在当前站加油。
2.如果在当前站加油,加多少才最省钱呢?显然,加得越少越好,如果不用把油箱加满就可以找到比当前站更低价的站,那就是最好情况,即找到满油箱可到达范围之内的最近的一个比当前站低价的站,加了相应的油之后开过去,到达时正好把油花完,这样高价油的用量最省。
3.如果满油箱可到达范围之内没有比当前站低价的站,即在最大范围内,当前站最低价,那么当然是把最低价油加满(相同距离最省钱),下一站应该去该范围内的次低价站,这样,就算下一站要加油,也是那时所以可能里最低价的。
4.如果满油箱可到达范围之内都没有加油站的话,即上述第2个问题,那么无法到达终点,最远行驶距离为当前站加上把满油耗尽所能行驶的距离。
如果到达下一站,就重复上述判断,这样就能保证总是占最大的便宜。总体思想就是,想尽一切办法找最便宜的加油站,并使开到那一站时油正好花完,若当前站最便宜,就把油加满接着找最便宜的站,这就是“贪心”的精髓。