首页 > 代码库 > POJ 2431 Expedition (贪心+优先队列)
POJ 2431 Expedition (贪心+优先队列)
题目地址:POJ 2431
将路过的加油站的加油量放到一个优先队列里,每次当油量不够时,就一直加队列里油量最大的直到可以到达下一站为止。
代码如下:
#include <iostream> #include <cstdio> #include <string> #include <cstring> #include <stdlib.h> #include <math.h> #include <ctype.h> #include <queue> #include <map> #include <set> #include <algorithm> using namespace std; struct node { int d, p; }stop[11000]; int cmp(node x, node y) { return x.d<y.d; } int main() { int n, i, j, l, p, flag=0, s, cnt; scanf("%d",&n); priority_queue<int>q; for(i=0;i<n;i++) { scanf("%d%d",&stop[i].d,&stop[i].p); } scanf("%d%d",&l,&p); for(i=0;i<n;i++) { stop[i].d=l-stop[i].d; } stop[n].d=l; stop[n].p=0; sort(stop,stop+n+1,cmp); cnt=0; for(i=0;i<=n;i++) { if(stop[i].d<0) continue ; if(p<stop[i].d) { while(!q.empty()&&p<stop[i].d) { p+=q.top(); q.pop(); cnt++; } if(p<stop[i].d) { flag=1; break; } } q.push(stop[i].p); } if(flag) puts("-1"); else printf("%d\n",cnt); return 0; }
POJ 2431 Expedition (贪心+优先队列)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。