【51nod】【堆】 卡车加油
题目
解题思路
将加油站排序后,依次加入堆
如果不够油去到当前加油站,就从堆里取出加油,直到可以到达
若堆为空,仍不能到达,说明无法到达终点
代码
#include<algorithm>
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
struct lzf{
int x,y;
}a[10010];
priority_queue<int> q;
int l,y,n,ans;
bool cmp(lzf l,lzf y)
{
return l.x<y.x;
}
int main()
{
scanf("%d%d%d",&l,&y,&n);
for (int i=1;i<=n;i++)
scanf("%d%d",&a[i].x,&a[i].y);
sort(a+1,a+n+1,cmp);
a[n+1].x=l;
for (int i=1;i<=n+1;i++)
{
while (y-a[i].x<0&&!q.empty())
{
y+=q.top();
q.pop();
ans++;
}
if (y-a[i].x<0)
{
printf("-1");
return 0;
}
q.push(a[i].y);
}
printf("%d",ans);
return 0;
}