题目链接:

pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864

题目大意:

有N个机器。M个任务。

当中每一个机器有xi,yi。(xi表示每台机器的最长工作时间。yi表示机器能够完毕的任务难度值)

每一个任务有xi,yi。(xi表示完毕该任务须要的时间,yi表示任务的难度)每完毕一个任务,能够得到一笔钱:500 * xi + 2 * yi。

一台机器最多仅仅能做一个任务。一个任务最多仅仅能被完毕一次。

问:最多能完毕几个任务,且在完毕任务最多的情况下,能得到钱数最多为多少。

解题思路:

贪心的想法。将机器和任务依照一下规则排序:

假设xi不同。依照xi的大小从大到小排序;

假设xi同样,yi不同。依照yi的大小从大到小排序;

假设上述均同样,则依照机器排在任务前面。

经过排序之后。就保证了前面的 x 值一定比后面的 x 值大,仅仅须要比較 y 值就可以。遍历一次,假设碰到机器,则将 y 值存进一个multiset里面。假设碰到任务。那么在multiset里面找一个最小的不小于 yi 的值。用该机器去完毕该任务。

代码:

  1. using namespace std;
  2. typedef long long ll;
  3. struct node {
  4. int x, y, type;
  5. } a[200010];
  6. int n, m;
  7. bool cmp(node s, node v) {
  8. if (s.x != v.x) return s.x > v.x;
  9. if (s.y != v.y) return s.y > v.y;
  10. if (s.type != v.type) return s.type > v.type;
  11. }
  12. multiset<int> s;
  13. multiset<int> :: iterator it;
  14. int main () {
  15. int x, y, cnt = 0;
  16. while(~scanf("%d%d", &n, &m)) {
  17. cnt = 0;
  18. for (int i = 0; i < n; i++) {
  19. scanf("%d%d", &a[cnt].x, &a[cnt].y);
  20. a[cnt++].type = 1;
  21. }
  22. for (int i = 0; i < m; i++) {
  23. scanf("%d%d", &a[cnt].x, &a[cnt].y);
  24. a[cnt++].type = 0;
  25. }
  26. sort(a, a + cnt, cmp);
  27. ll ans = 0;
  28. ll t = 0;
  29. s.clear();
  30. for (int i = 0; i < cnt; i++) {
  31. if (a[i].type == 1) s.insert(a[i].y);
  32. else {
  33. if(!s.empty()) {
  34. it = s.lower_bound(a[i].y);
  35. if (it == s.end()) continue;
  36. t++;
  37. ans += a[i].y * 2 + 500 * a[i].x;
  38. s.erase(it);
  39. }
  40. }
  41. }
  42. printf("%I64d %I64d\n", t, ans);
  43. }
  44. return 0;
  45. }

2014 Multi-University Training Contest 1 — D. Task的更多相关文章

  1. 2014 Multi-University Training Contest 9#11

    2014 Multi-University Training Contest 9#11 Killing MonstersTime Limit: 2000/1000 MS (Java/Others)   ...

  2. 2014 Multi-University Training Contest 9#6

    2014 Multi-University Training Contest 9#6 Fast Matrix CalculationTime Limit: 2000/1000 MS (Java/Oth ...

  3. HDU4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

    Redraw Beautiful Drawings Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  4. 2014 Multi-University Training Contest 1/HDU4864_Task(贪心)

    解题报告 题意,有n个机器.m个任务. 每一个机器至多能完毕一个任务.对于每一个机器,有一个最大执行时间Ti和等级Li,对于每一个任务,也有一个执行时间Tj和等级Lj.仅仅有当Ti>=Tj且Li ...

  5. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

  6. 2014 Multi-University Training Contest 1/HDU4861_Couple doubi(数论/法)

    解题报告 两人轮流取球,大的人赢,,, 贴官方题解,,,反正我看不懂.,,先留着理解 关于费马小定理 关于原根 找规律找到的,,,sad,,, 非常easy找到循环节为p-1,每个循环节中有一个非零的 ...

  7. hdu 4937 2014 Multi-University Training Contest 7 1003

    Lucky Number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) T ...

  8. hdu 4941 2014 Multi-University Training Contest 7 1007

    Magical Forest Time Limit: 24000/12000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Other ...

  9. hdu 4939 2014 Multi-University Training Contest 7 1005

    Stupid Tower Defense Time Limit: 12000/6000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/ ...

随机推荐

  1. iOS开发之计算动态cell的高度并缓存

    项目中有个类似微博那样的动态cell,文字和图片的多少都不是确定的 刚开始使用autolayout,结果很多问题,最后我发现了一个框架 FDTemplateLayoutCell 写的很好,自动布局ce ...

  2. SystemTap----将SystemTap脚本编译成内核模块

      当运行SystemTap脚本时,会根据脚本生成一个内核模块,然后插入到系统中执行后退出.这个过程总共分为5个阶段:parse, elaborate, translate, compile, run ...

  3. Windows多线程

    //简单的引出多线程是肿么回事儿....当点击下载的时候,下载内容还没结束也可以点击资源库,其实这就用了另一个线程,弹出“下载完成”对话框的时候,没有点击确定是不能点击主页面内容的,这就是用----- ...

  4. C# 使用PictureBox控件--点击切换图片

    效果: 1. 2. 代码: private Boolean fals = true; /// <summary> /// 单击事件 /// </summary> /// < ...

  5. iphone开发,模拟器生成文件路径

    原文链接:http://blog.csdn.net/gf771115/article/details/7722023 Finder---位置----apple(用户名)---application s ...

  6. C++算术运算符与算术表达式

    基本的算术运算符 在本章中主要介绍算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,其他运算符将在以后各章中陆续介绍. 常见算数运算符 运算符 说明 举例 + 加法运算符,或正值 ...

  7. ActivityGroup相关--getLocalActivityManager() 以及intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)用法

    ActivityGroup简介 1.ActivityGroup的核心就是继承了该类,能够通过getLocalActivityManager()得到一个LocalActivityManager 如,Lo ...

  8. Android_Service组件详解

    1.Service概述 Service服务是一个没有用户界面的在后台运行执行操作的应用组件,其它组件可以通过Intent意图启动这个Service去完成特定的功能,比如通过Service可以完成播放音 ...

  9. java环境变量配置问题

    你要配置三个环境变量JAVA_HOMECLASSPATHPath你都配置了吗? 系统变量→新建 JAVA_HOME 变量 .变量值填写jdk的安装目录(本人是 E:\Java\jdk1.7.0) 系统 ...

  10. Study notes for B-tree and R-tree

    B-tree B-tree is a tree data structure that keeps data sorted and allows searches, sequential access ...