贪心+堆/优先队列
如果现在的油量能到达下一个加油站则继续走;否则就要加上之前走过的加油站中油最多且没走过的加油站的油,如果前面的所有加油站都加过油了还不能到达下一个加油站输出 -1。
看到要求最大值,第一想到的肯定是 sort。但是!sort 被卡了。
那怎么办呢?这样一来,就想到了堆和优先队列。
#include <bits/stdc++.h>
using namespace std;
struct jyz {
int wz, yl;
bool operator<(const jyz& other) const
{
return yl < other.yl;
}//重载运算符,比sort排序还快些
} s[10010];
priority_queue<jyz> q;
int cmp2(jyz x, jyz y)
{
return x.wz < y.wz;
}
int main()
{
int n, y, t = 0, x;
scanf("%d", &n);
for (int i = n; i >= 1; i--) {
scanf("%d%d", &s[i].wz, &s[i].yl);
}//这里倒序不用管
scanf("%d%d", &x, &y);
for (int i = 1; i <= n; i++) {
s[i].wz = x - s[i].wz;
}//算出离起点的距离
s[n + 1].wz = x, s[n + 1].yl = 0;//记得