加油站问题分析

描述

一辆汽车加满油后可行驶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);

}



}

 

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

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

转载于:https://www.cnblogs.com/SCAU_que/articles/1850637.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值