• 最高的奖励 优先队列


    有N个任务,每个任务有一个最晚结束时间以及一个对应的奖励。在结束时间之前完成该任务,就可以获得对应的奖励。完成每一个任务所需的时间都是1个单位时间。有时候完成所有任务是不可能的,因为时间上可能会有冲突,这需要你来取舍。求能够获得的最高奖励。

    Input第1行:一个数N,表示任务的数量(2 <= N <= 50000)
    第2 - N + 1行,每行2个数,中间用空格分隔,表示任务的最晚结束时间Ei以及对应的奖励Wi。(1 <= Ei <= 10^9,1 <= Wi <= 10^9)Output输出能够获得的最高奖励。Sample Input
    7
    4 20
    2 60
    4 70
    3 40
    1 30
    4 50
    6 10
    Sample Output
    230
     
    先排序,在入队
     
    代码:
     
    #include <iostream>
    #include <cstdio>
    #include <queue>
    #include <map>
    #include <algorithm>
    using namespace std;
    int n;
    struct assign
    {
        int time,award;
        friend bool operator <(assign a,assign b)
        {
            return a.award>b.award;
        }
    }as[50000];
    int cmp(assign a,assign b)
    {
        return a.time<b.time;
    }
    int main()
    {
        int n;
        long long sum=0;
        priority_queue <assign>q;
        scanf("%d",&n);
        for(int i=0;i<n;i++)
        {
            scanf("%d %d",&as[i].time,&as[i].award);
        }
        sort(as,as+n,cmp);
        for(int i=0;i<n;i++)
        {
            q.push(as[i]);
            sum+=as[i].award;
            if(i<n-1&&as[i+1].time!=as[i].time)
            {
                while(q.size()>as[i].time)
                {
                    sum-=q.top().award;
                    q.pop();
                }
            }
        }
                while(q.size()>as[n-1].time)
                {
                    sum-=q.top().award;
                    q.pop();
                }
                printf("%lld",sum);
    }
  • 相关阅读:
    【idea-部署web项目】
    【IDEA下使用tomcat部署web项目】
    【 PLSQL Developer安装、tnsnames.ora配置 解答】
    【idea--git】
    【Sping管理bean的原理】
    【关于eclipse的一些自己常用的插件】
    【Spring-任务调度】
    【mysql存储引擎】
    【mysql-索引+存储过程+函数+触发器-更新。。。】
    【转-mysql-explain介绍】
  • 原文地址:https://www.cnblogs.com/8023spz/p/7225167.html
Copyright © 2020-2023  润新知