[POJ 2431]Expedition

1、题目连接:http://poj.org/problem?id=2431

2、题目大意:你需要开着一辆卡车行驶L单位距离,最开始卡车有P单位汽油,卡车每开一单位距离需要消耗1单位汽油,如果在中途卡车汽油耗尽,卡车就无法继续前行,到不了终点,在途中一共有n个加油站,告诉你每个加油站距离终点的距离和每个加油站可以加的油量,假设卡车的油箱是无穷大的,问卡车至少要加多少次油才能到达终点?卡车到不了终点输出-1

3、题目思路:使用优先队列+贪心思想完成此题,队列中维护到达目前的加油站之前没有用过的加油站,保证队首的加油站可以加的油最多,如果当前油箱内的油量不够到达当前加油站,就从优先队列队首取出一个未用过的加油站加油。如果需要加油时队列为空,则卡车到不了终点

4、代码:

#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <queue>

#define MAXN 10010

using namespace std;

struct info
{
	int a,b; //a[i]=第i个加油站和起点之间的距离,b[i]=第i个加油站的油量
}station[MAXN];

priority_queue<int>heap;

bool cmp(info x,info y)
{
	return x.a<y.a;
}

int main()
{
	int n,l,p;
	scanf("%d",&n);
	for(int i=0;i<n;i++)
		scanf("%d%d",&station[i].a,&station[i].b);
	scanf("%d%d",&l,&p);
	for(int i=0;i<n;i++)
		station[i].a=l-station[i].a;
	int ans=0,pos=0,tank=p; //ans-加油次数,pos-当前位置,tank-剩余油量
	station[n].a=l; //为了便于处理,把终点也看成一个加油站
	station[n].b=0;
	n++;
	sort(station,station+n,cmp);
	for(int i=0;i<n;i++)
	{
		int dist=station[i].a-pos; //dist=接下来要前行的距离
		while(tank-dist<0) //油箱里的油不够就不断加,只加最大的加油站里的油
		{
			if(heap.empty()) //没有可选的加油站,没油走不了了
			{
				printf("-1\n");
				return 0;
			}
			tank+=heap.top();
			heap.pop();
			ans++;
		}
		tank-=dist; //走到下一站,油箱中的油量减少
		pos=station[i].a;
		heap.push(station[i].b);
	}
	printf("%d\n",ans);
	return 0;
}



时间: 2024-11-08 17:28:21

[POJ 2431]Expedition的相关文章

poj 2431 Expedition (贪心+优先队列)

Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 6890   Accepted: 2065 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to

poj 2431 Expedition 贪心+最大堆

当油量不够时从走过的油站中选最大加油量的 #include<iostream> #include<queue> #include<stdlib.h> #include<algorithm> using namespace std; #define MAX_N 10005 struct node{ int dist,fuel; }t[MAX_N]; bool cmp(const node &a,const node &b) { return a

poj 2431 Expedition(优先队列)

题目链接 http://poj.org/problem?id=2431 Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9243   Accepted: 2700 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor driver

POJ 2431 Expedition (STL 优先权队列)

Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8053   Accepted: 2359 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to

poj - 2431 Expedition (优先队列)

http://poj.org/problem?id=2431 你需要驾驶一辆卡车做一次长途旅行,但是卡车每走一单位就会消耗掉一单位的油,如果没有油就走不了,为了修复卡车,卡车需要被开到距离最近的城镇,在当前位置和城镇之间有n个加油站可以加油. 为了减少危险,需要最少的加油次数,卡车的油箱可以看作无限大,卡车初始距离城镇L单位,自身有P单位的油. 注意输入的距离是与城镇的距离不是与开始点的距离.转换一下就好. 思想:把经过的所有加油站都加入优先队列,当燃料不足时就取出优先队列的最大元素,用来给卡车

POJ 2431 Expedition(探险)

Time Limit: 1000MS   Memory Limit: 65536K [Description] [题目描述] A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to run over a rock and puncture the truck's f

poj 2431 Expedition 贪心+优先队列

Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7707   Accepted: 2263 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to

POJ 2431 Expedition (贪心 + 优先级队列)

Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7696   Accepted: 2260 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed to

poj 2431 Expedition (贪心加优先队列)

Expedition Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11538   Accepted: 3336 Description A group of cows grabbed a truck and ventured on an expedition deep into the jungle. Being rather poor drivers, the cows unfortunately managed t