zoukankan      html  css  js  c++  java
  • 加油站问题 (优先队列)

    输入:

    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 }
  • 相关阅读:
    spark 中划分stage的思路
    如何带人
    技术管理
    学会谈判
    绩效评估与绩效反馈
    企业文化如何落地
    绩效沟通的best原则
    Area POJ
    Cows POJ
    Grandpa's Estate POJ
  • 原文地址:https://www.cnblogs.com/wangmengmeng/p/5245114.html
Copyright © 2011-2022 走看看