/**
* 加汽油游戏,计算从起点至终点最少需要加几次油
L 表示起点到终点的距离
P 表示起点的油量
stop中 first保存的是该汽油站距离终点的距离,second保存的是该汽油站的油量
*/
#include <queue>
int calMinGasUp(int L, int P, vector<pair<int, int>>& stop)
{
int result = 0;
priority_queue<int, vector<int>, less<int>> Q;
sort(stop.begin(), stop.end(), [](auto& a, auto& b) {return a.first > b.first; });
stop.push_back(make_pair(0, 0));//添加终点坐标
for (int i = 0; i < stop.size();i++)
{
int distance = L - stop[i].first;
while (!Q.empty() && distance > P)
{
P += Q.top();
Q.pop();
result++;
}
if (Q.empty() && distance > P)
return -1;
P = P - distance;
L = stop[i].first;
Q.push(stop[i].second);
}
}
贪心算法之最优加油方法(额外堆的数据结构)
最新推荐文章于 2023-10-21 11:05:04 发布