zoukankan      html  css  js  c++  java
  • POJ 2431 贪心+优先队列

    题意:一辆卡车距离重点L,现有油量P,卡车每前行1米耗费油量1,途中有一些加油站,问最少在几个加油站加油可使卡车到达终点或到达不了终点。
     
    思路:运用优先队列,将能走到的加油站的油量加入优先队列中,油不够时加入优先队列中数值最大的油,如果油不够时队列里为空则到达不了。
     
     
    #include<cstdio>
    #include<queue>
    #include<algorithm>
    using namespace std;
    priority_queue<int> que;
    struct Stop {
        int dis,fuel;
    }stop[10010];
    bool cmp (Stop a,Stop b) {
        if(a.dis==b.dis) return a.fuel>b.fuel;
        return a.dis<b.dis;
    }
    int main() {
        int n,L,p;
        while(~scanf("%d",&n)) {
            for(int i=0;i<n;i++) {
                scanf("%d%d",&stop[i].dis,&stop[i].fuel);
            }
            scanf("%d%d",&L,&p);
            for(int i=0;i<n;i++) {
                stop[i].dis=L-stop[i].dis;
            }
            sort(stop,stop+n,cmp);
            stop[n].dis=L;stop[n].fuel=0;
            int cnt=0,pos=0,flag=0;
            for(int i=0;i<=n;i++) {
                int d=stop[i].dis-pos;
                while(p<d) {
                    if(!que.empty()) {
                        p+=que.top();
                        que.pop();
                        cnt++;
                    }else break;
                }
                if(p<d) {
                    flag=1;
                    puts("-1");break;
                }
                p-=d;
                que.push(stop[i].fuel);
                pos=stop[i].dis;
            }
            if(flag==0) printf("%d
    ",cnt);
            while(!que.empty()) que.pop();
        }
        return 0;
    }
     
  • 相关阅读:
    201521123065《java程序设计》第14周学习总结
    201521123065《java程序设计》第13周学习总结
    201521123065《java程序设计》第12周学习总结
    选择器
    浮动布局
    定位布局—position
    软工个人总结
    个人作业4——alpha阶段个人小结
    软件工程个人作业3
    结队编程
  • 原文地址:https://www.cnblogs.com/LinesYao/p/5740854.html
Copyright © 2011-2022 走看看