输入:
N=4,L=25,P=10
A={10,14,20,21}
B={10,5,2,4}
输出:
2 (在第1个和第2个加油站加油)
1.如果优先队列也是空的,则无法到达终点.
2.否则取出优先队列中的最大元素,并用来给卡车加油.
1 int L,P,N; 2 int A[MAX],B[MAX]; 3 4 void solve() 5 { 6 //为了方便,我们把终点也认为是加油站 7 A[N]=L; 8 B[N]=0; 9 N++; 10 //维护加油站的优先队列 11 priority_queue<int> q; 12 //ans:加油次数,pos:现在的位置,tank油箱中汽油的量 13 int ans=0,pos=0,tank=P; 14 15 for(int i=0; i<N; i++){ 16 //接下去要前进的距离 17 int d=tank-pos; 18 //不断加油直到油量足够行驶到下一个加油站 19 while(tank-d<0){ 20 if(q.empty()){ 21 puts("-1"); 22 return ; 23 } 24 tank+=q.top(); 25 q.pop(); 26 ans++; 27 } 28 29 tank-=d; 30 pos=A[i]; 31 q.push(B[i]); 32 } 33 printf("%d ",ans); 34 }