• Uva 1153 Keep the Customer Satisfied (贪心+优先队列)


    题意:已知有n个工作,已知每个工作需要的工作时间qi和截至时间di,工作只能串行完成,问最多能完成多少个工作

    思路:首先我们按照截至时间从小到大排序,让它们依次进入优先队列中,当发生执行完成时间大于截至时间时,我通过优先队列把工作中最长的需要时间出队

    优先队列的比较函数:

    struct cp
    {
        bool operator () (node a,node b)
        {
            //可以理解为我如何让后入队的优先出队
            if(b.need>a.need) return true;
            else return false;
        }
    };

    代码:

    #include <iostream>
    #include <cstring>
    #include <cstdio>
    #include <queue>
    #include <algorithm>
    
    using namespace std;
    const int maxn=800005;
    struct node
    {
        int need,ed;
    }data[maxn];
    
    struct cp
    {
        bool operator () (node a,node b)
        {
            if(b.need>a.need) return true;
            else return false;
        }
    };
    
    bool cmp(node a,node b)
    {
        if(a.ed<b.ed) return true;
        else if(a.ed==b.ed)
        {
            if(a.need<b.need) return true;
            else return false;
        }
        else return false;
    }
    
    int main()
    {
        int n;
        int t;
        cin>>t;
        while(t--)
        {
            cin>>n;
            for(int i=0;i<n;i++)
            {
                cin>>data[i].need>>data[i].ed;
            }
            sort(data,data+n,cmp);
            priority_queue<node,vector<node>,cp> q;
            int tmp=0,ans=0;
            for(int i=0;i<n;i++)
            {
                q.push(data[i]);
                tmp=tmp+data[i].need;
                if(tmp>data[i].ed)
                {
                    node k=q.top();
                    q.pop();
                    tmp=tmp-k.need;
                    ans--;
                }
                ans++;
            }
            if(ans<=0) ans=0;
            cout<<ans<<endl;
            if(t) cout<<endl;
        }
        return 0;
    }
  • 相关阅读:
    2019年8月16日_实验室学术论文研讨
    2019年8月2日实验室学术研讨会议
    2019年7月26日实验室学术研讨会议
    2019年7月12日实验室开展学术研讨
    hdu 5547
    hdu 1286
    hdu 1272
    hdu 1213
    poj 2533 LIS(最长上升序列)
    HUD 5773 LIS(最长上升序列)
  • 原文地址:https://www.cnblogs.com/simplekinght/p/6936447.html
Copyright © 2020-2023  润新知