首页 > 代码库 > POJ 2431 Expedition 贪心
POJ 2431 Expedition 贪心
题意:一辆汽车由起点开往小镇,总路程为L,路上有N个加油站,第i个加油站距离小镇a[i],最多可为提供b[i]的汽油,汽车开始时有P单位汽油,问汽车内否到达小镇,若能到达输出最小的加油次数。
思路:每经过一个加油站i,汽车就获得了一次在任何时候加油b[i]的权利,当汽车不足以到达下一站时,就加入过往的最大的b值。
#include<stdio.h> #include<queue> #include<iostream> #include<algorithm> #include<math.h> #include<string.h> #define INF 0x3f3f3f3f #define LL long long #define MOD 100000007 #define MAXSIZE 20005 using namespace std; struct node { int a,b; }p[MAXSIZE]; int cmp(struct node A,struct node B) { if(A.a != B.a) return A.a < B.a; return A.b > B.b; } int Solve(int n,int l,int k) { priority_queue<int> Q; int ans=0,pos=0,hav=k; for(int i=0;i<=n;i++) { int d = p[i].a - pos; while(hav - d < 0) { if(Q.empty()) { return -1; } hav += Q.top(); Q.pop(); ans++; } hav -= d; pos = p[i].a; Q.push(p[i].b); } return ans; } int main() { int n,l,k; while(scanf("%d",&n)!=EOF) { for(int i=0;i<n;i++) { scanf("%d%d",&p[i].a,&p[i].b); } scanf("%d%d",&l,&k); for(int i=0;i<n;i++) p[i].a = l - p[i].a; p[n].a = l; p[n].b = 0; sort(p,p+n,cmp); int ans = Solve(n,l,k); printf("%d\n",ans); } return 0; }
POJ 2431 Expedition 贪心
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。