C++ 贪心算法 最佳加油方案

已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知这n个加油站到终点的距离d与各个加油站可以加油的量l,起点位置至终点的距离L与起始时刻邮箱中汽油量P;假设使用1个单位的汽油即走1个单位的距离,邮箱没有上限,最少加几次油,可以从起点开至终点?(如果无法达到终点,返回-1)

#include<vector>
#include<algorithm>
#include<queue>
bool cmp(const std::pair<int, int>& a, const std::pair<int, int>& b)
{
 return a.first > b.first;
}
int get_minimum_top(int L, int P, std::vector<std::pair<int, int>>& stop)
{
 std::priority_queue <int> Q;
 int result = 0;
 stop.push_back(std::make_pair(0, 0));
 std::sort(stop.begin(), stop.end(), cmp);
 for (unsigned int i = 0; i < stop.size(); i++)
 {
  int dis = L - stop[i].first;
  while (!Q.empty()&&P<dis)
  {
   P += Q.top();
   Q.pop();
   result++;
  }
  if (Q.empty()&&P<dis)
  {
   return -1;
  }
  P = P - dis;
  L = stop[i].first;
  Q.push(stop[i].second);
 }
return result;
};
发布了61 篇原创文章 · 获赞 47 · 访问量 1602

猜你喜欢

转载自blog.csdn.net/weixin_44208324/article/details/104573042
今日推荐