题目链接:hdu 4864

  其实就是个贪心,只是当初我想的有偏差,贪心的思路不对,应该是这样子的:

  因为 xi 的权值更重,所以优先按照 x 来排序,而这样的排序方式决定了在满足任务(即 xi >= xj && yi >= yj)的所有机器中(设为 S)优先选择更贴近 yj 的 yi(因为我们肯定是选择最贴近任务 x,y 值的机器,要么是 xi 最贴近,要么是 yi 最贴近),这样子可以使得浪费最小——因为在后续的任务中,xj 只会越来越小,S 中的任何一台机器的 xi 值都能满足要求,但 yj 就不一定了,因为一开始是按照 x 来排序的,所以 yj 有可能会比之前的更大,因此我们为当前任务选择机器时 yi 能小则小,把 yi 更大的机器留给后续有可能满足的任务,这样子就可以使得当前的浪费最小。

  用个数组来作标记,整个程序就是近乎 O(n) 的复杂度了:

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
const int N = ; struct node {
int x,y;
node() {}
node(int x, int y): x(x), y(y) {}
bool operator < (const node &n2) const {
if(x == n2.x) return y > n2.y;
return x > n2.x;
}
void read() { scanf("%d %d",&x,&y); }
} mach[N], task[N]; int c[]; int main() {
int n,m;
while(~scanf("%d %d",&n,&m)) {
for(int i = ; i < n; ++i)
mach[i].read();
for(int i = ; i < m; ++i)
task[i].read();
sort(mach, mach + n);
sort(task, task + m);
memset(c, , sizeof c);
int num = ;
ll ans = ;
for(int i = , j = ; j < m; ++j) {
while(i < n && mach[i].x >= task[j].x) {
c[mach[i].y]++;
++i;
}
for(int k = task[j].y; k <= ; ++k) {
if(c[k]) {
++num;
ans += * task[j].x + * task[j].y;
--c[k];
break;
}
}
}
printf("%d %I64d\n",num,ans);
}
return ;
}

hdu 4864 Task的更多相关文章

  1. HDU 4864 Task(贪心)

    HDU 4864 Task 题目链接 题意:有一些机器和一些任务.都有时间和等级,机器能做任务的条件为时间等级都大于等于任务.而且一个任务仅仅能被一个机器做.如今求最大能完毕任务.而且保证金钱尽量多 ...

  2. Hdu 4864(Task 贪心)(Java实现)

    Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...

  3. hdu 4864 Task(贪婪啊)

    主题链接:pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS ...

  4. HDU 4864 Task(经典贪心)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS (Java/Others)    M ...

  5. HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...

  6. hdu 4864 Task(贪心)

    pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 大致题意:有n台机器和m个任务,都有两个參数工作时间time和难度le ...

  7. 2014多校第一场D题 || HDU 4864 Task (贪心)

    题目链接 题意 : 用N台机器,M个任务,每台机器都有一个最大工作时间和等级,每个任务有一个需要工作时间和一个等级.如果机器完成一个任务要求是:机器的工作时间要大于等于任务的时间,机器的等级要大于等于 ...

  8. hdu 4864 Task (贪心 技巧)

    题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...

  9. HDU 4864 Task (贪心)

    Task 题目链接: http://acm.hust.edu.cn/vjudge/contest/121336#problem/B Description Today the company has ...

随机推荐

  1. Selenium Grid 简易安装

    转载自:http://blog.csdn.net/xifeijian/article/details/17057659

  2. Python网络爬虫Scrapy框架研究 以及 代理设置

    地址:https://github.com/yidao620c/core-scrapy 例子:https://github.com/geekan/scrapy-examples 中文翻译文档: htt ...

  3. error: command 'x86_64-linux-gnu-gcc' failed with exit status 1

    转载自:http://blog.csdn.net/wang1144/article/details/42277179 在ubuntu14.04版本上安装lxml,老是出错,在一番艰辛的搜索之后 ,终于 ...

  4. java面试中的智力题

    智力题,每个正式的笔试.面试都会出,而且在面大企业的时候必然会问到,笔者曾在很多面试中,都被问到过,不过答得都不是很好,因为时间很短,加上我们有时候过于紧张,所以做出这类问题,还是有一定的难度,从这篇 ...

  5. jQuery常用技巧-使用的总结

    1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...

  6. 使用JavaScript操作DOM节点元素的常用方法(创建/删除/替换/复制等)

    getElementById(id)这是通过id来访问某一元素,最常用的之一,例:<html><body><div id="myid">test ...

  7. .Net自帶Ajax和GridView

    如圖所示,在新建web窗體后的工具欄中有一個 AJAX擴展 ScriptManager 在整個網頁中有且只有一個,使用母版頁和用戶控件中尤為注意, 例如在嵌套母版頁和用戶控件時只在最外層加上Scrip ...

  8. 关于stl string find 容易犯的一个错误

    有时候经常会判断一个字符串a中是否有子字符串b,那么有人会调用 string::find这个函数  这个函数返回子字符串首次出现的位置,那么有人会这样写 string str1 = "&qu ...

  9. 当插入数据失败时,防止mysql自增长字段的自增长的方法

    问题描述: 当mysql设置了自增长字段时(注意:一个表中只能设置一个自增长字段,可以不是主键,但必须是键 ),如果插入数据失败,那么自增长字段仍然会占用这个自增长值,再次成功插入数据时就会造成断层. ...

  10. An Example of On-Error Trigger in Oracle Forms

    I wrote this trigger around 4 years ago to handle errors in an application based on Oracle Forms 6i. ...