一辆汽车加满油后可行驶n公里。旅途中有若干个加油站。设计一个有效算法,指出应在哪些加油站停靠加油,使沿途加油次数最少。如果不能到达,输出-1。
如果到某个地方汽车没油了,则认为在之前的加油站加过油了,如果之前加油站加过油荏苒不够,则表示不能到达,输出-1。
#include <iostream>
#include <queue>
using namespace std;
priority_queue<int> pque;
int main(){
int n,l,p,a[100],b[100];
cin>>n>>l>>p;
for(int i=1;i<=n;i++){
cin>>a[i];
}
a[0]=0;a[n+1]=l;
for(int i=1;i<=n;i++){
cin>>b[i];
}
b[0]=p;b[n+1]=20;//起点和终点假设也可以加油
int energy=p,count=0;
for(int i=1;i<=n;i++){
int d=a[i]-a[i-1];
while(p<d){
if(pque.empty()){
cout<<"-1";
return 0;
}
else{
p+=pque.top();
pque.pop();
count++;
}
}
p-=d;
pque.push(b[i]);
}
cout<<count;
return 0;
}
/*
4 25 10
10 14 20 21
10 5 2 4
*/