汽车加油问题

欢迎访问我的个人博客:苦酒的个人小站

题目

Problem Description

一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。并证明算法能产生一个最优解。对于给定的n和k个加油站位置,计算最少加油次数。

Input

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

Output

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

Sample Input

7 7

1 2 3 4 5 1 6 6

Sample Output

4

思路

最开始的时候以为是一个比较困难的贪心,考虑最优解等问题,后来认真读了读,好像就是一个遍历的循环。
首先对数组进行输入的时候来判断是否大于汽车加满油后可行驶公里,如果大于,直接输出“No Solution!”,这时候输出的时候,一定要return 0,不然会超时。如果小于,遍历一遍数组,定义一个sum和count,sun用来表示当前跑的公里数,如果超过N,则把sun归0,count++,i–,最后遍历出count的数值,直接输出即可。

代码

C代码:


#include <stdio.h>
#include <stdlib.h>

int main()
{
   int n, k, i;
   int a[5001] = {0};
   scanf("%d%d", &n, &k);
   for(i = 1; i <= k + 1; i++)
   {
       scanf("%d", &a[i]);
       if(a[i] > n)
       {
           printf("No Solution!");
            return 0;
       }
   }
   int count = 0;
   int sum = 0;
   for(i = 1; i <= k + 1; i++)
   {
       sum = sum + a[i];
       if(sum > n)
       {
           sum = 0;
           i--;
           count++;
       }
   }
   printf("%d\n", count);
    return 0;
}


/***************************************************
User name: jk170631黄良帅
Result: Accepted
Take time: 0ms
Take Memory: 168KB
Submit time: 2019-11-12 23:25:33
****************************************************/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱敲代码的小黄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值