[BZOJ1572][Usaco2009 Open]工作安排Job
1572: [Usaco2009 Open]工作安排Job
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1351 Solved: 632 [Submit][Status][Discuss]
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
2 10
1 5
1 7
Sample Output
HINT
第1个单位时间完成第3个工作(1,7),然后在第2个单位时间完成第1个工作(2,10)以达到最大利润
#include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; char buf[10000000], *ptr = buf - 1; inline int readint(){int n = 0;char ch = *++ptr;while(ch < '0' || ch > '9') ch = *++ptr;while(ch <= '9' && ch >= '0'){n = (n << 1) + (n << 3) + ch - '0';ch = *++ptr;}return n; } const int maxn = 100000 + 10; typedef long long ll; struct Node{int d, p;Node(){}Node(int _d, int _p): d(_d), p(_p){}bool operator < (const Node &x) const{return d < x.d;} }a[maxn], t; class cmp{public:bool operator () (const Node &a, const Node &b){return a.p > b.p;} }; priority_queue<Node, vector<Node>, cmp> q; int main(){fread(buf, sizeof(char), sizeof(buf), stdin);int n = readint();for(int i = 1; i <= n; i++){a[i].d = readint();a[i].p = readint();}sort(a + 1, a + n + 1);int tot = 0;long long ans = 0;for(int i = 1; i <= n; i++){if(tot == a[i].d){t = q.top();if(a[i].p > t.p){q.pop();q.push(a[i]);ans += a[i].p - t.p;}}else{tot++;ans += a[i].p;q.push(a[i]);}}printf("%lld\n", ans);return 0; }
转载于:https://www.cnblogs.com/ruoruoruo/p/7486650.html
[BZOJ1572][Usaco2009 Open]工作安排Job相关推荐
- bzoj1572 [Usaco2009 Open]工作安排Job
[Usaco2009 Open]工作安排Job Time Limit: 10 Sec Memory Limit: 64 MB Description Farmer John 有太多的工作要做啊!!!! ...
- [BZOJ1572] [Usaco2009 Open]工作安排Job(贪心 + 堆)
传送门 把任务按照d排序 一次加入到堆中,如果当前放不进堆中,并且比堆中最小的大, 就从堆中弹出一个数,再把当前的数放进去 #include <queue> #include <cs ...
- 【bzoj1572】[Usaco2009 Open]工作安排Job 贪心+堆
题目描述 Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单位时间(!). ...
- [Usaco2009 Open]工作安排Job
Time Limit: 10 Sec Memory Limit: 64 MB Submit: 1457 Solved: 687 [Submit][Status][Discuss] Descript ...
- 【BZOJ】1572: [Usaco2009 Open]工作安排Job
[题意]给定n项工作的截止时间和价值,每项工作需要1单位时间完成,求最大价值.n<=10^5. [算法]贪心+堆 [题解] 如果是访问到x时将d[x]前的点从价值最大的能加就加是错误的贪心,因为 ...
- bzoj 1572: [Usaco2009 Open]工作安排Job
Description Farmer John 有太多的工作要做啊!!!!!!!!为了让农场高效运转,他必须靠他的工作赚钱,每项工作花一个单位时间. 他的工作日从0时刻开始,有1000000000个单 ...
- 麦肯锡顾问深度工作安排:将工作可视化
工作表安排的三个步骤 凡是善于工作的人,都有一个共通的方法,那就是他们能够有意识或者无意识地使自己的整体工作可视化. 商业系统型的工作安排法: 流程:为了创造价值明确工作的整体流程 分解:将整体流程分 ...
- 综合布线工作组2008年上半年技术课题工作安排会议通知
中国工程建设标准化协会信息通信专业委员会 建标信通字[2008] 02号 综合布线工作组2008年上半年技术课题工作安排会议通知 各工作组成员 中国工程建设标准化协会信息通信专业委员会综合布线 ...
- 2010年上半年计算机专业技术资格考试工作安排
2010年上半年计算机专业技术资格考试工作安排<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:o ...
最新文章
- SAP Marketing Cloud功能简述(三) 营销活动内容设计和产品推荐
- 章鱼黑的第一篇博客~
- 学习过程中的一些想法
- PTA的非零返回原因以及解决办法
- 三菱PLC编程软件Work2的FB块加密后的解密方法
- PX4原生固件,position_estimator_inav解读
- python 表格处理项目该如何分工_python 处理 Excel 表格
- 利用Visual C++ 实现QQ消息群发 ,大神实际测试,已成功发送消息
- So Who's Counting? by Erin McHugh and Emily Luchetti
- 7-15 地下迷宫探索
- pd.read_csv报错:UnicodeDecodeError: ‘utf-8‘ codec can‘t decode byte 0xc8 in position 0: invalid contin
- (详解)opencv里的cv2.resize改变图片大小Python
- meshgrid()+plt.contourf()用法
- Android广播(Broadcast)
- 《花开伊吕波》26集片尾曲歌词
- python中加减乘除_Python基础算法综合:加减乘除四则运算方法
- Git提交单个文件过大,git error: remote unpack failed:error Object too large
- java实现倒计时闹钟_倒计时闹钟软件下载-倒计时闹钟app下载v1.2.4-西西软件下载...
- 【2019.07-2020.06】这一年的心路历程
- 怎么把视频里的音乐提取成音频?一分钟帮你搞定