POJ 2431 Expedition【贪心】
题意:
卡车每走一个单元消耗一升汽油,中途有加油站,可以进行加油,问能否到达终点,求最少加油次数。
分析:
优先队列+贪心
代码:
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
const int maxn = 10055;
typedef pair<int, int>pii;
pii p[maxn];
priority_queue<int>q;
int main (void)
{
int n;cin>>n;
int d, f, L, P;
for(int i = 1; i <= n ; i++) {
cin>>d>>f;
p[i] = make_pair(d, f);
}
sort(p+1, p+1+n);
cin>>L>>P;
int num = 0, flag = 0;
p[n + 1].first= L;
p[n + 1].second= 0;
p[0].first= 0;
for(int i = n + 1; i >= 1; i--){
q.push(p[i].second);
while(P<p[i].first - p[i - 1].first){
if(q.empty()){
flag=1;break;
}
P+=q.top();q.pop();
num++;
}
if(flag) break;
P-=p[i].first - p[i - 1].first;
}
if(flag) cout<<-1<<endl;
else cout<<num<<endl;
}