用了优先级队列(即最大堆)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;
}