汽车加油问题
一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。对于给定的n(n <= 5000)和k(k <= 1000)个加油站位置,计算输出最少加油次数与加油站编号。如果无法到达目的地,则输出”NoSolution”。
输入:第一行有2个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1个整数,表示第k个加油站与第k-1个加油站之间的距离。第0个加油站表示出发地,汽车已加满油。第k+1个加油站表示目的地。
测试用例:
n=7; k=7 ;k+1个整数:1 2 3 4 5 1 6 6;最优值:4,3/4/6/7
问题分析:
贪心算法解决问题总是从当前对自己最有利的立场出发。先检查加油站之间的距离,若有大于汽车加满油能跑的最远距离,直接输出”No Solution“。之后,既然要求最少加油次数,那么如果当前汽车中剩余油量足以支持到下一个加油站的路程,这次就不用加油。
c++实现:
#include<iostream>
using namespace std;
int fuel_up(int d[], int n, int k){
for