• POJ 2431 Expedition 贪心


    题意:一辆汽车由起点开往小镇,总路程为L,路上有N个加油站,第i个加油站距离小镇a[i],最多可为提供b[i]的汽油,汽车开始时有P单位汽油,问汽车内否到达小镇,若能到达输出最小的加油次数。

    思路:每经过一个加油站i,汽车就获得了一次在任何时候加油b[i]的权利,当汽车不足以到达下一站时,就加入过往的最大的b值。

    #include<stdio.h>
    #include<queue>
    #include<iostream>
    #include<algorithm>
    #include<math.h>
    #include<string.h>
    #define INF 0x3f3f3f3f
    #define LL long long
    #define MOD 100000007
    #define MAXSIZE 20005
    
    using namespace std;
    
    struct node
    {
        int a,b;
    }p[MAXSIZE];
    
    int cmp(struct node A,struct node B)
    {
        if(A.a != B.a)
            return A.a < B.a;
        return A.b > B.b;
    }
    
    int Solve(int n,int l,int k)
    {
        priority_queue<int> Q;
        int ans=0,pos=0,hav=k;
        for(int i=0;i<=n;i++)
        {
            int d = p[i].a - pos;
            while(hav - d < 0)
            {
                if(Q.empty())
                {
                    return -1;
                }
    
                hav += Q.top();
                Q.pop();
                ans++;
            }
            hav -= d;
            pos = p[i].a;
            Q.push(p[i].b);
        }
        return ans;
    }
    
    int main()
    {
        int n,l,k;
        while(scanf("%d",&n)!=EOF)
        {
            for(int i=0;i<n;i++)
            {
                scanf("%d%d",&p[i].a,&p[i].b);
            }
            scanf("%d%d",&l,&k);
            for(int i=0;i<n;i++)
                p[i].a = l - p[i].a;
            p[n].a = l;
            p[n].b = 0;
            sort(p,p+n,cmp);
            int ans = Solve(n,l,k);
            printf("%d
    ",ans);
        }
        return 0;
    }
    View Code
  • 相关阅读:
    读Javascript MDN之闭包
    观察者模式小探
    javascript之克隆
    element-vue的简单使用
    页面加载海量数据
    手把手教你入门微信公众号开发
    ES6 Promise 用法讲解
    Javascript模块化编程(三):require.js的用法
    Javascript模块化编程(二):AMD规范
    Javascript模块化编程(一):模块的写法
  • 原文地址:https://www.cnblogs.com/alan-W/p/7188357.html
Copyright © 2020-2023  润新知