链接:http://poj.org/problem?id=2431
当燃料用完后,选择经过的所有加油站中能加的油最多的..
所以,在之后需要加油时,就认为在之前经过的加油站加油就可以了..优先队列
#include <iostream>
#include<queue>
#include<algorithm>
using namespace std;
class fuel
{
public:
int dis;
int amt;
};
bool cmp(fuel a,fuel b)
{
return a.dis<b.dis;
}
fuel data[10005];
int l,p,n;
int solve()
{
data[n].amt=0;
data[n].dis=l;
n++;
priority_queue<int> que;
int i;
int d,tank,pos,ans;
tank=p;
pos=0;
ans=0;
for(i=0;i<n;i++)
{
d=data[i].dis-pos;
while(tank-d<0)
{
if(que.empty())
return -1;
tank+=que.top();
que.pop();
ans++;
}
tank-=d;
pos=data[i].dis;
que.push(data[i].amt);
}
return ans;
}
int main()
{
int i;
while( cin>>n)
{
for(i=0;i<n;i++)
cin>>data[i].dis>>data[i].amt;
cin>>l>>p;
for(i=0;i<n;i++)
data[i].dis=l-data[i].dis;
sort(data,data+n,cmp);
cout<<solve()<<endl;
}
return 0;
}