bzoj1572 [Usaco2009 Open]工作安排Job

news/2024/7/7 8:38:12

[Usaco2009 Open]工作安排Job

Time Limit: 10 Sec Memory Limit: 64 MB

Description

Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间。 他的工作日从0时刻开始,有1000000000个单位时间(!)。在任一时刻,他都可以选择编号\(1~N\)\(N(1 <= N <= 100000)\)项工作中的任意一项工作来完成。 因为他在每个单位时间里只能做一个工作,而每项工作又有一个截止日期,所以他很难有时间完成所有\(N\)个工作,虽然还是有可能。 对于第\(i\)个工作,有一个截止时间\(D_i(1 <= D_i <= 1000000000)\),如果他可以完成这个工作,那么他可以获利\(P_i( 1<=P_i<=1000000000 )\). 在给定的工作利润和截止时间下,FJ能够获得的利润最大为多少呢?答案可能会超过32位整型。

Input

第1行:一个整数N. 第2~N+1行:第i+1行有两个用空格分开的整数:\(D_i\)\(P_i\).

Output

输出一行,里面有一个整数,表示最大获利值。

Sample Input

3
2 10
1 5
1 7

Sample Output

17

HINT

第1个单位时间完成第3个工作(1,7),然后在第2个单位时间完成第1个工作(2,10)以达到最大利润

贪心,网上题解是正着的,所以我们倒着贪心。。。。。
代码解释。


#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e5 + 5;
struct lpl{
    int d;
    long long p;
    bool operator < (const lpl &a)const{
        return a.d < d;
    }
}ini[maxn];
priority_queue<long long> q;
int n, tot = 1;
long long ans = 0;

inline void putit()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; ++i) scanf("%d%lld", &ini[i].d, &ini[i].p);
}

inline void workk()
{
    sort(ini + 1, ini + n + 1);
    //for(int i = 1; i <= n; ++i) printf("%d%lld\n", ini[i].d, ini[i].p);
    for(int i = ini[1].d; i >= 1; --i){
        while(ini[tot].d == i)
        {q.push(ini[tot].p); tot++;}
        if(!q.empty()) 
        {ans += q.top(); q.pop();}
    }
    cout << ans;
}

int main()
{
    putit();    
    workk();
    return 0;
}

转载于:https://www.cnblogs.com/LLppdd/p/8679235.html


http://www.niftyadmin.cn/n/4558087.html

相关文章

C语言怎么 学

然后在为了同样的目的自己写一次代码并试验 先从抄书上的简单代码开始 最大限度的完成并理解每个你见过的程序 最后要学会举一反三 ||| 全身心的投入 如果不成功再对照样例 抄完了以后就试验代码

20154312 曾林 Exp3 免杀原理与实践

20154312 曾林 0.写在前面 AV厂商检测恶意软件的方式主流的就三种&#xff1a; 基于特征码的检测启发式恶意软件检测基于行为的恶意软件检测我们要做的就是让我们的恶意软件没法被这三种方式找到&#xff0c;也就是免杀。具体的手段有&#xff1a; 改变特征码 如果你手里只有EX…

java高手进

实在太钻了 ||| 这是做什么的 1.abc 2.abd 3.acd 4.ce 5.ce 6.f 7.a 8.df 9.a 10.cd 13.a 14.abd 16.e 18.acde 19.ce 20.ae没写我不确定 面试题吗

通配符的使用

*&#xff1a;表示匹配全部字符可以多个 &#xff1f;&#xff1a;表示匹配任意一个字符 [a-z] &#xff1a;表示 a-z范围内的任意一个字符 [1-9]:表示匹配1-9其中的任意一个数字 daokrDK:~$ ls -l [a-z].??? -rwxrwxr-- 1 daokr daokr 7456 3月 29 20:59 a.out daokrDK:~$…

怎样让这个程序重复执行而不退出啊

/a/a/a");scanf("%c" word1);printf("/n它的ASCILL码是%d" word &word);while(word 0)//在这加一个循环 当输入的word 不为0时 可以给换成回车{printf("请输入大写字母&#xff1a;");if((word>A)&&(word<Z)){word1word-…

开学第三测

开学第三测 &#xff08;题目分析摘自dalao博客 https://blog.csdn.net/todobe/article/details/54617259 https://blog.csdn.net/cdqzgxxqdql/article/details/53085481&#xff09; P71          竞赛时间&#xff1a;???? 年?? 月?? 日??:??-??:??…

关于属性和调方法这块 软件的两种语言:Java和C#

我知道 你在网上收 北京尚学堂 那上面有许多Java的视频

Python全栈之路系列之文件操作

Python可以对文件进行查看、创建等功能&#xff0c;可以对文件内容进行添加、修改、删除&#xff0c;且所使用到的函数在Python3.5.x为open&#xff0c;在Python2.7.x同时支持file和open&#xff0c;但是在3.5.x系列移除了file函数。 Python文件打开方式 文件句柄 open(文件路…