题目链接:

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 的值。用该机器去完毕该任务。

代码:

using namespace std;
typedef long long ll;
struct node {
int x, y, type;
} a[200010];
int n, m;
bool cmp(node s, node v) {
if (s.x != v.x) return s.x > v.x;
if (s.y != v.y) return s.y > v.y;
if (s.type != v.type) return s.type > v.type;
}
multiset<int> s;
multiset<int> :: iterator it;
int main () {
int x, y, cnt = 0;
while(~scanf("%d%d", &n, &m)) {
cnt = 0;
for (int i = 0; i < n; i++) {
scanf("%d%d", &a[cnt].x, &a[cnt].y);
a[cnt++].type = 1;
}
for (int i = 0; i < m; i++) {
scanf("%d%d", &a[cnt].x, &a[cnt].y);
a[cnt++].type = 0;
}
sort(a, a + cnt, cmp);
ll ans = 0;
ll t = 0;
s.clear();
for (int i = 0; i < cnt; i++) {
if (a[i].type == 1) s.insert(a[i].y);
else {
if(!s.empty()) {
it = s.lower_bound(a[i].y);
if (it == s.end()) continue;
t++;
ans += a[i].y * 2 + 500 * a[i].x;
s.erase(it);
}
}
}
printf("%I64d %I64d\n", t, ans);
}
return 0;
}

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. TROUBLE SHOOTING: FRM-30425

    关键字:Oracle Form buider FRM-30425 汇总 错误信息如下: FRM-30425: Summarized database item must reside in a blo ...

  2. WinForm 小程序 NotePad

    运行效果: 代码: using System; using System.Collections.Generic; using System.ComponentModel; using System. ...

  3. AFNetworking2.5使用2

    链接地址:http://blog.csdn.net/abc4715760/article/details/46521111 官网下载2.5版本:http://afnetworking.com/ 此文章 ...

  4. X窗口系统名词解释

    前端时间Gentoo的桌面环境出了点问题,发现自己对Linux的桌面环境了解的很少,于是恶补了一下知识,以下名词解释基本上都是来自维基百科的条目和<Linux程序设计(第三版)>.一般而言 ...

  5. asp.net用Zxing库实现条形码输出

    原文 asp.net用Zxing库实现条形码输出 这个简单的问题,困扰了我将近两个小时,主要是再官方文档上没有找到demo,那只能用搜索引擎了,看看其他程序员写的程序,但是发现处处是坑,看了四五个例子 ...

  6. scrapy新浪天气

    一.实验说明 1. 环境登录 无需密码自动登录,系统用户名shiyanlou 2. 环境介绍 本实验环境采用带桌面的Ubuntu Linux环境,实验中会用到桌面上的程序: LX终端(LXTermin ...

  7. 正则表达式引擎的构建——基于编译原理DFA(龙书第三章)——3 计算4个函数

    整个引擎代码在github上,地址为:https://github.com/sun2043430/RegularExpression_Engine.git nullable, firstpos, la ...

  8. [poj 1265]Area[Pick定理][三角剖分]

    题意: 给出机器人移动的向量, 计算包围区域的内部整点, 边上整点, 面积. 思路: 面积是用三角剖分, 边上整点与GCD有关, 内部整点套用Pick定理. S = I + E / 2 - 1 I 为 ...

  9. HDURevenge of Segment Tree(第二长的递增子序列)

    HDURevenge of Segment Tree(第二长的递增子序列) 题目链接 题目大意:这题是求第二长的递增子序列. 解题思路:用n^2的算法来求LIS,可是这里还要记录一下最长的那个序列是否 ...

  10. 分享一个嵌入式httpdserver开发库 - boahttpd library

    http://sourceforge.net/projects/boahttpd/ 一个C接口的开发库,适用于 windows/linux/或其它嵌入式平台,支持CGI扩展,支持多线程.採用面向对象开 ...