描述

一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。
对于给定的n和k(k <= 1000)个加油站位置,编程计算最少加油次数。

 

Input

有多个测试用例。每个测试用例输入数据的第一行有2 个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油
站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。当输入n,k都是0的时候表示测试结束。

Output

将编程计算出的最少加油次数输出,每个测试用例输出一行。如果无法到达目的地,则输出"No Solution"。

 

Sample Input

7 7
1 2 3 4 5 1 6 6
5 1
50 5
0 0

 

Sample Output

4
No Solution
----------------------------------------------------------------------------------------
#include<stdio.h>
int a[1001];
int count=0;
void Count(int max_l,int n)
{
int i,j,flag=0;

for(i=0;i<=n;i++)
{
scanf(
"%d",&a[i]);
if(a[i]>max_l) //判断加油站间距离超过满油走的一趟路程长度
flag=1;

}
if(flag==1)
{
printf(
"No Solution\n");
}
else
{

int max=0; //尽力走得最远
for(j=0;j<=n;j++)
{
max
+=a[j];
if(max>max_l)
{
j
--; //退回去加油
max=0;
count
++;
}

}
printf(
"%d\n",count);
}
}

main()
{
int n,max_l;
scanf(
"%d%d",&max_l,&n);
while(n&&max_l)
{
Count(max_l,n);
scanf(
"%d%d",&max_l,&n);

}



}

 

 贪心算法解决方案
 贪心算法的基本思想:该题目求加油的最少次数,就是说求最优解的问题,可分成几个步骤,每个步骤的最优解不一定是整个问题的最优解,
 然而对于有些问题,局部的最优解可以得到全局的最优解。贪心算法就是将问题的求解过程看作是一系列选择,从问题的初始解出发,向定点目标推进,
 推进的每一个阶段不是依据一个固定的递推过程,而是每一个阶段看上去的最优解。

    问题的分析:由于汽车由起始点到终点方向开,我们可以假设,通过一趟加油,使其能够最大限度地完成这趟油的使命,那么每加满一次油,都能够最大限度地利用这一趟油,那么我们所走过的路程就越长,离终点就越接近,那么自然加油的次数就最少了。

posted on 2010-10-13 23:16  KuSiuloong  阅读(3748)  评论(0编辑  收藏  举报