题目:
AC情况:
主要思路:
这题用到了贪心算法和优先队列。油箱里一开始有P单位油,一直往前跑,把途径的加油站放入优先队列中。在到达某个加油站之前没油了,就从优先队列中,弹出能加油最多的那个站,加油,再往前跑,直到跑到终点。如果没跑到,队列里也没有加油站了,就算失败。
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
typedef pair<int, int> p;
int cmp(const void *a, const void *b) {
return (*(p *)a).first < (*(p *)b).first ? 1 : -1;
}
p fuel[10010];
priority_queue<int> q;
int main() {
int N,i,L,P,sum=0;
while (cin >> N) {
for(i=0;i<N;i++)
scanf_s("%d%d", &fuel[i].first,&fuel[i].second);
scanf_s("%d%d", &L, &P);
fuel[N].first = 0;
fuel[N].second = 0;
N++;
qsort(fuel, N,sizeof(fuel[0]),cmp );
for (i = 0; i <N; i++) {
fuel[i].first = L - fuel[i].first;
while (P-fuel[i].first< 0) {
if (q.empty()) {
puts("-1");
return 0;
}
P += q.top();
q.pop();
sum++;
}
q.push(fuel[i].second);
}
printf("%d\n", sum);
}
return 0;
}