POJ2431Expedition (不懂这题怎么就模拟费用流了)

版权声明:本文为博主原创文章,未经博主允许必须转载。 https://blog.csdn.net/qq_35950004/article/details/88329955

题意:有一辆车,要开 l l 的路,它每开一单位的路要消耗一单位的油。车里原来有 p p 的油,车的油箱容量是无限大的。现在路上不同位置有一些加油站,这些加油站里有一定量的油,问开到终点最少要加几次油。
用堆优化贪心。

AC Code:

#include<cstdio>
#include<cstring>
#include<cctype>
#include<algorithm>
#include<queue>
#define maxn 10005
#define LL long long
using namespace std;

int n,d[maxn],ad[maxn],c[maxn],L,P;
priority_queue<int>q;

inline bool cmp(const int &u,const int &v){ return d[u]<d[v]; }

int main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;i++) scanf("%d%d",&d[i],&ad[i]),c[i]=i;
	scanf("%d%d",&d[n+1],&P),c[n+1]=n+1;
	for(int i=1;i<=n;i++) d[i]=d[n+1]-d[i];
	sort(c+1,c+1+n,cmp);
	int ans = 0;
	for(int i=1;i<=n+1;i++)
	{
		int u = c[i];
		if(P<d[u])
		{
			while(P<d[u] && !q.empty()) P+=q.top(),ans++,q.pop();
			if(P<d[u] && q.empty()) 
			{
				puts("-1");
				return 0;
			}
		}
		q.push(ad[u]);
	}
	printf("%d\n",ans);
}

猜你喜欢

转载自blog.csdn.net/qq_35950004/article/details/88329955