Task

题目链接:

http://acm.hust.edu.cn/vjudge/contest/121336#problem/B

Description

Today the company has m tasks to complete. The ith task need xi minutes to complete. Meanwhile, this task has a difficulty level yi. The machine whose level below this task’s level yi cannot complete this task. If the company completes this task, they will get (500xi+2yi) dollars.

The company has n machines. Each machine has a maximum working time and a level. If the time for the task is more than the maximum working time of the machine, the machine can not complete this task. Each machine can only complete a task one day. Each task can only be completed by one machine.

The company hopes to maximize the number of the tasks which they can complete today. If there are multiple solutions, they hopes to make the money maximum.

Input

The input contains several test cases.

The first line contains two integers N and M. N is the number of the machines.M is the number of tasks(1 < =N <= 100000,1<=M<=100000).

The following N lines each contains two integers xi(0<xi<1440),yi(0=<yi<=100).xi is the maximum time the machine can work.yi is the level of the machine.

The following M lines each contains two integers xi(0<xi<1440),yi(0=<yi<=100).xi is the time we need to complete the task.yi is the level of the task.

Output

For each test case, output two integers, the maximum number of the tasks which the company can complete today and the money they will get.

Sample Input

1 2

100 3

100 2

100 1

Sample Output

1 50004

##题意:

有n台机器和m个任务,每台机器有对应的工作时间和难度上限,每个任务有时间需求和难度.
每个任务的报酬由时间和难度决定(500*x+2*y).
求最多完成多少任务,任务数相同时报酬尽量多.


##题解:

一开始看题目以为是每个任务有时间\难度\金钱三个因素,不方便进行贪心操作.
仔细观察题目数据范围和所给的公式后发现:时间x增加1报酬会增加500,而难度最多增加100会提升报酬200;
所以时间才是决定报酬的要素,按照时间降序排列(时间相等时难度降序)后,任务的报酬也就有序了.

现在的问题是对于每个任务,如何选取完成这个任务的机器:
由于我们对机器和任务都排序过,那么时间上能满足当前任务的机器一定也能够满足接下来任务.

而对于若干个时间上满足当前任务的机器,应该选择难度上限尽量小(但满足当前任务)的机器; 而留下难度上限大的机器以待完成后面的需求.

算法流程:
先对机器和任务都按照上述规则排序:
依次扫描每个任务,先找到时间上满足任务要求的全部机器,并将它们的难度上限在数组中标记出来(因为难度的范围只有100,记录每个难度有多少机器能应对即可). 最后找出最小能满足任务难度要求的机器即可.
WA点:难度是从0开始的; 报酬总数要用longlong


##代码:
``` cpp
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define LL long long
#define eps 1e-8
#define maxn 101000
#define mod 100000007
#define inf 0x3f3f3f3f
#define IN freopen("in.txt","r",stdin);
using namespace std;

int n, m;

typedef pair<int,int> pii;

pii machine[maxn];

pii task[maxn];

int lev_cnt[110];

int main(int argc, char const *argv[])

{

//IN;

while(scanf("%d %d", &n,&m) != EOF)
{
memset(lev_cnt, 0, sizeof(lev_cnt));
for(int i=1; i<=n; i++) {
int x,y; scanf("%d %d", &x,&y);
machine[i] = make_pair(x,y);
}
for(int i=1; i<=m; i++) {
int x,y; scanf("%d %d", &x,&y);
task[i] = make_pair(x,y);
}
sort(machine+1, machine+1+n, greater<pii>());
sort(task+1, task+1+m, greater<pii>()); int finish = 0;
LL money = 0;
for(int i=1,j=1; i<=m; i++) {
int t = task[i].first;
int lev = task[i].second;
for(; j<=n; j++) {
if(machine[j].first >= t)
lev_cnt[machine[j].second]++;
else break;
} for(int k=0; k<=100; k++) {
if(!lev_cnt[k]) continue;
if(k >= lev) {
lev_cnt[k]--;
finish++;
money += 500LL*(LL)t + 2LL*(LL)lev;
break;
}
}
} printf("%d %I64d\n", finish, money);
} return 0;

}

HDU 4864 Task (贪心)的更多相关文章

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

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

  2. HDU 4864 Task(贪心)

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

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

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

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

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

  5. hdu 4864 Task (贪心 技巧)

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

  6. HDU 4864 Task(经典贪心)

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

  7. hdu 4864 Task

    题目链接:hdu 4864 其实就是个贪心,只是当初我想的有偏差,贪心的思路不对,应该是这样子的: 因为 xi 的权值更重,所以优先按照 x 来排序,而这样的排序方式决定了在满足任务(即 xi > ...

  8. hdu 4864 Task(贪婪啊)

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

  9. hdu 4864 Task(贪心)

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

随机推荐

  1. kafka的环境搭建

    kafka是一个高吞吐量的消息系统.隔离消息接收和处理过程(可理解为一个缓存) 1.kafka伪分布的部署 1.1.下载并解压 1.2.启动zk bin/zookeeper-server-start. ...

  2. 查看mssql死锁的详细信息(存储过程)

    CREATE  procedure [dbo].[sp_who_lock]asbegindeclare @spid int,@bl int,        @intTransactionCountOn ...

  3. gsp序列模式挖掘

    数据挖掘进阶之序列模式挖掘GSP算法 绪 继续数据挖掘方面算法的讲解,前面讲解了数据挖掘中关联规则算法FP-Growth的实现.此篇博文主要讲解基于有趣性度量标准的GSP序列模式挖掘算法.有关论文后期 ...

  4. 物联网操作系统HelloX开发者入门指南

    HelloX开发者入门指南 HelloX是聚焦于物联网领域的操作系统开发项目,可以通过百度搜索"HelloX",获取详细信息.当前开发团队正在进一步招募中,欢迎您的了解和加入.如果 ...

  5. linux - markdown编辑器

    1. linux可以用web-qq,http://web2.qq.com,[我们从未放弃成长,这句话挺感动我的.] (禽兽!你怎么在一开始就跑题!?) ————我只要“及时预览”———— 2. htt ...

  6. ssl选购

    上机实践,参考了: http://www.lovelucy.info/nginx-ssl-certificate-https-website.html http://nginx.org/cn/docs ...

  7. Memcache应用场景介绍,说明

    面临的问题 对于高并发高访问的Web应用程序来说,数据库存取瓶颈一直是个令人头疼的问题.特别当你的程序架构还是建立在单数据库模式,而一个数据池连接数峰 值已经达到500的时候,那你的程序运行离崩溃的边 ...

  8. 安装oracle XML Database 组件

    近期部署项目数据库,编译包时遇到错误:   PACKAGE CTG.CTG_CSB_COMMON 编译错误  错误:PLS-00201: identifier 'XMLDOM' must be dec ...

  9. HTML5之video元素

    一.video元素支持的视频格式 HTML5中的video标签支持3种常用的视频格式: 1.Ogg = 带有Theora 视频编码和Vorbis 音频编码的 Ogg 文件: 2.MPEG4 = 带有H ...

  10. 字符串截取数字和点击radio显示不同内容

    <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> & ...