美文网首页
贪心算法-最优加油方法

贪心算法-最优加油方法

作者: _Monk | 来源:发表于2018-05-21 09:32 被阅读0次

题目

图1. 题目要求

思路

  1. 题目要求最少加油次数,为了加油次数最少,我们需要考虑下面的问题
  • 什么时候加油能使得加油次数最少?
    当油用完的时候加油。
    具体实现:判断到下一个加油站的距离和此时油量的大小,如果油量大于距离则还不用加油,如果油量小于距离则需要加油。
  • 在哪个加油站加油可以使得加油的次数最少?
    在油量最大的加油站加油。
    具体实现:可以使用一个数据结构保存经过的加油站的油量,当油量不够到下一站的时候从其中取出油量最大的值。
  1. 怎么解决上面的两个问题
  • 对问题进行建模: 图1. 问题建模

    在数轴上的点表示加油站。


    图2. 思路分析
    图3. 流程分析

代码实现

bool cmp(const std::pair<int, int> &a, const std::pair<int, int> &b)
{
    return a.first > b.first;
}
int getMinimumStop(std::vector<std::pair<int, int>> &stop, int P, int L)
    {
        int minimumStop = 0;
        std::priority_queue<int> Q;  // 用来存放油量的最大堆
        stop.push_back(std::make_pair(0, 0));  // 将终点作为一个停靠点添加到stop中

        std::sort(stop.begin(), stop.end(), cmp);  // 将停靠点到终点的距离大小排序

        for (int i = 0; i < stop.size(); i++) {  // 遍历各个停靠点
            int distance = L - stop[i].first;
            while (!Q.empty() && P < distance) {  // 如果剩余油量不够到下一个加油站则要加油
                P += Q.top();
                Q.pop();
                minimumStop++;
            }
            if (Q.empty() && P < distance) {
                return -1;
            }
            P = P - distance;
            L = stop[i].first;
            Q.push(stop[i].second);
        }

        return minimumStop;
    }

相关文章

  • 贪心算法-最优加油方法

    题目 思路 题目要求最少加油次数,为了加油次数最少,我们需要考虑下面的问题 什么时候加油能使得加油次数最少?当油用...

  • 如何指定战略路径

    1.打破贪心算法,找到全局最优 1)贪心算法 2)全局最优 要有价值主张,数据代表过去,避免过度依赖贪心算法 3)...

  • 贪心算法-Python刷题笔记

    贪心算法 贪心选择:通过一系列的局部最优解达到整体最优解。 前提:必须证明贪心选择可以达到最优解:先证明整体最优解...

  • (3更)算法总结

    贪心算法 Q:什么是贪心算法? A:不管最后怎么样,先获得当前的最优解。所以贪心算法最后得到的解并不一定是最优解 ...

  • 贪心算法

    贪心算法 当具有最优子结构性质的时候,可以使用动态规划算法也可以使用贪心算法 最优子结构性质、贪心选择性质 虽然贪...

  • 算法导论笔记

    贪心算法 贪心算法:每一步在当时看起来是最佳的选择,总是做出局部最优的选择 贪心算法并不保证得到最优解,但对于很多...

  • 算法设计常用思想之贪心算法

    贪心算法的基本思想 贪心算法,是寻找最优解问题的常用方法,这种方法模式一般将求解过程分成若干个步骤,但每个步骤都应...

  • 贪心算法

    算法解释 顾名思义, 贪心算法或贪心思想采用贪心的策略,保证每次操作都是局部最优的,从而使最后得到的结果是全局最优...

  • 五大常用算法

    1.贪心算法 贪心算法的要素 1)贪心选择性质:可以通过局部最优选择来构造全局最优解。换言之,直接做出在当前问题中...

  • 漫步数据结构与算法系列之 贪心算法

    贪心算法是一种鼠目寸光的算法思路。算法的核心是,用局部最优解逼近全局最优解。是一种很简单粗暴的方式。 贪心算法,不...

网友评论

      本文标题:贪心算法-最优加油方法

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