POJ 2341 优先队列

题意:汽车要行驶L单位的距离。最开始,汽车上有P单位的汽油,汽车走一单位路程要消耗一单位1汽油,如果汽车在形式途中汽油耗尽,那么将无法继续前行。途中有n个加油站,第i个加油站距离起点有a[i]单位的距离,且能加b[i]单位的油。问到达终点所需的最少加油次数。

Solution:这题可以理解为,在到达加油站时,就获得了一次在之后的任何时候都可以加b[i]单位汽油的权利,而在之后需要加油的时候,就认为是在之前经过的加油站加的油就可以了。因为希望加油的次数最少,所以每次加油量尽可能最大,所以要用到优先队列来选区最大的加油量。

AC_Code:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define ll long long
#define ull unsigned long long
#define mem(a,x) memset((a),(x),sizeof ((a)))//x只能是0或-1或false或true
#define debug(x) cout<<"X: "<<(x)<>n>>l>>p;
    mem(a,0);
    mem(b,0);
    for(int i=0; i que;
    //队列的首元素为队列中的最大值
    //加油次数 现在所在的位置 油箱中的汽油
    int ans=0,pos=0,tank=p;
    for(int i=0; i

 

你可能感兴趣的:(数据结构基础,CF,HDU,POJ,题目)