Poj 2431

用了優先級隊列(即最大堆)proirity_queue

2431 Accepted 296K 47MS C++
#include <iostream>//Poj_2431 Expedition
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <string>
#include <queue>
using namespace std;

const int MAX_N=10005;
int n,L,p;
struct Town{
    int a;
    int d;
}town[MAX_N];
bool operator<(const Town x,const Town y){
    return x.d<y.d;
}
priority_queue<int> pq;
int solve(){
    int ans=0;
    int i=0;
    while(true){
        if(p>=L)
            return ans;
        while(town[i].d<=p&&i<n){
            pq.push(town[i].a);
            i++;
        }
        if(!pq.empty()){
            ans++;
            p=p+pq.top();
            pq.pop();
        }
        else break;
    }
    return -1;
}
int main(){
    //freopen("2431.txt","r",stdin);
    scanf("%d",&n);
    for(int i=0;i<n;i++)
        scanf("%d%d",&town[i].d,&town[i].a);
    scanf("%d%d",&L,&p);
    for(int i=0;i<n;i++)
        town[i].d=L-town[i].d;
    sort(town,town+n);
    //for(int i=0;i<n;i++)
     //   printf("%d %d\n",town[i].d,town[i].a);
    printf("%d\n",solve());
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章