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;
}
posted @ 2016-02-07 23:21  zhuyujiang  阅读(95)  评论(0编辑  收藏  举报