美文网首页算法的阶梯
贪心算法---汽车加油问题

贪心算法---汽车加油问题

作者: Tedisaname | 来源:发表于2018-10-31 15:33 被阅读61次
问题描述:

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

要求:

输入:第一行有2个正整数n和k,表示汽车加满油后可行驶n公里,且旅途中有k个加油站。接下来的1 行中,有k+1 个整数,表示第k个加油站与第k-1 个加油站之间的距离。第0 个加油站表示出发地,汽车已加满油。第k+1 个加油站表示目的地。
输出:输出编程计算出的最少加油次数。如果无法到达目的地,则输出”NoSolution”。

思路:

汽车行驶过程中,应走到自己能走到并且离自己最远的那个加油站,在那个加油站加油后再按照同样的方法贪心进行求解

具体算法:

先检测各加油站之间的距离,若发现其中有一个距离大于汽车加满油能跑的距离,则输出 "No Solution"
否则,对加油站间的距离进行逐个扫描,尽量选择往远处走,不能走了就让num++,最终统计出来的num便是最少的加油站数
例如:
输入:
7 7 //分别代表汽车加满油后能够行驶7公里,旅途中有7个加油站
1 2 3 4 5 1 6 6 //各个加油站直接的距离
输出:4 //输出的沿途能够到达目的地最少的加油次数

codes:

#include <iostream>
using namespace std;

void gasoline(int g[],int n,int k)
{
    int num = 0;
    for(int i = 0; i <= k; i++){
        if(g[i] > n)
            cout << "No Solution" << endl; //can not reach the destination, print the tip information
    }
    
    for(int i = 0,s = 0; i <= k; i++){//know if the g[i] can reach the destination
        s += g[i];  //accumulate the distance has been past
        if(s > n){  //if the accumalated distance better than the the car can reach ,need to gas
            num++;//count the numbers of the gas
            s = g[i];//reset the distance 
        }
        
    }
    
    cout << num << endl;//print out the number of the gas
}

int main()
{
    int n,k;//how far the car can go and how many gas stations there are
    int a[1000];
    cin >> n >> k;
    for(int i = 0; i <= k; i++ ){
        cin >> a[i];//the distance of each of the gas station input
    }
    
    gasoline(a,n,k);//can the fuction to count the result
    return 0;
}


//test:
7 7
1 2 3 4 5 1 6 6
4

--------------------------------
Process exited after 17.31 seconds with return value 0
请按任意键继续. . .

相关文章

  • 贪心算法汽车加油问题

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

  • 贪心算法---汽车加油问题

    问题描述: 一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿...

  • 【算法打卡60天】Day29贪心算法:如何用贪心算法实现Huff

    Day29学习内容 :贪心算法:如何用贪心算法实现Huffman压缩编码? 1.如何理解贪心算法?贪心算法解决问题...

  • 984. 不含 AAA 或 BBB 的字符串/ 134. 加油站

    984. 不含 AAA 或 BBB 的字符串 相关标签 : 贪心算法 134. 加油站 相关标签: 贪心算法

  • 只需9步,直接拿下贪心算法

    今天为大家分享的是贪心算法。 贪心算法:贪心算法(又称贪婪算法)是指,在对问题求解时,总是做出在当前看来是最好的选...

  • 可用贪心算法解决的几个基本问题

    可用贪心算法解决的几个基本问题 关键:看问题有没有贪心选择性质和最优子结构性质。有些问题看似是可以用贪心算法,但是...

  • 算法理论 | 贪心算法

    贪心算法 贪心算法,又称贪婪算法(Greedy Algorithm),是指在对问题求解时,总是做出在当前看来是最好...

  • GREEDY ALGORITHM

    贪心算法原理 贪心算法以动态规划方法为基础,区别于贪心算法在每一次做出贪心选择后,子问题之一为空,下一步只需继续分...

  • 装箱问题

    贪心算法 装箱问题 问题描述: 求解思路: 代码实现:

  • 贪心算法+回溯算法

    贪心算法 先来比较一下贪心算法和动态规划 贪心算法是指在对问题求解时,总是做出在当前看来是最好的选择,不考虑整体,...

网友评论

    本文标题:贪心算法---汽车加油问题

    本文链接:https://www.haomeiwen.com/subject/xbdatqtx.html