版权声明:本文为博主原创文章,未经博主允许必须转载。 https://blog.csdn.net/qq_35950004/article/details/88329955
题意:有一辆车,要开
的路,它每开一单位的路要消耗一单位的油。车里原来有
的油,车的油箱容量是无限大的。现在路上不同位置有一些加油站,这些加油站里有一定量的油,问开到终点最少要加几次油。
用堆优化贪心。
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);
}