汽车加油问题--贪心算法(算法设计与分析)

7-1 汽车加油问题

题目来源:王晓东《算法设计与分析》

一辆汽车加满油后可行驶 n公里。旅途中有若干个加油站。设计一个有效算法,指出应
在哪些加油站停靠加油,使沿途加油次数最少。

输入格式:

第一行有 2 个正整数n和 k(k<=1000 ),表示汽车加满油后可行驶n公里,且旅途中有 k个加油站。
第二行有 k+1 个整数,表示第 k 个加油站与第k-1 个加油站之间的距离。
第 0 个加油站表示出发地,汽车已加满油。
第 k+1 个加油站表示目的地。

输出格式:

输出最少加油次数。如果无法到达目的地,则输出“No Solution!”。

输入样例:

7 7
1 2 3 4 5 1 6 6 

输出样例:

4

贪心算法:不能得到整体最优解,而是局部最优解,关键在于贪心策略的选择 

思路: 到站后的剩余油量能到下一站,不加油

            到站后的剩余油量到不了下一站,若加了油后到得了,则加油,若加了油后还是到不了, 则退出

#include    
using namespace std;
//汽车加油问题
 int main(){                
 	int n;   //汽车满油可行驶的距离
 	int k;   //有几个加油站
 	int times;  //加油次数
 	bool flag=true;   //判断是否能到达终点
 	cin>>n>>k;
 	
 	int distance[k+1];   //起点,k个加油站,终点 之间的距离
 	for(int i=0;i<=k;i++){
 		cin>>distance[i];
	 }
	
	int oil=n;   //到站后的剩余油量
	for(int i=0;i=distance[i+1]){   //到站后的剩余油量 可以到下一站  不加油
		continue;
	}
	else{     //到站后的剩余油量 到不了下一站
		if((oil+n)>distance[i+1]){     //加了油后能到下一站  加
		  times++;
		  oil=n;	
	    }
		else{    //加了油后还是到不了下一站 输出 No Solution!
		  cout<<"No Solution!";
		  flag=false;
		  break;
	    }
	}
}
  if(flag==true) cout<

你可能感兴趣的:(算法设计与分析,贪心算法,算法,c++,数据结构)