您的位置:首页 > 其它

POJ 2431 Expedition

2014-06-12 16:54 387 查看
链接: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
.amt=0;
data
.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;
}


 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  队列