hdoj4864 Task (贪心)
题目来源:
2014 Multi-University Training Contest 1--by FZU
题意:有N个机器和m个工作。机器和工作都有一个时间xi和价值yi,一个工作仅仅有满足xi和yi都小于机器的才干在这个机器上做,一个机器最多能做一个工作。做一个工作获得的钱是工作的xi*500+yi*2,最多完毕多少任务,最多有多个的话输出钱最多的。如何安排?
分析:贪心题目,比赛的时候想到贪心。是给机器选工作。工作时间跟小于机器最接近的,然后另一个价值yi。不好贪心。
中间又想到把他们的值放在一个矩阵中贪心,转化为在一个子矩阵中求结果,这个思想也是非常好的,可是大前提没有考虑正确,事实上是给工作选机器。为什么呢?
由于题目求让完毕的任务最多,所以能够把工作和机器都按时间从大到小,然后价值从大到小,然后给每一个工作找机器。首先全部的工作时间比当前任务的工作时间大的都能够选,我们贪心选择当中价值最小的满足条件的一个机器,把大的留给后面的。这样思路就没有错了、
然后是处理,假设直接写的话接近O(n^2),必超时,開始想到的优先队列,可是优先队列返回的是最小的。我们要的是首先要满足大于当前任务价值。所以不行,然后能够用vector,也能够直接用一个数组处理。由于时间都是满足条件的,仅仅要贪心选择一个最优的价值。所以能够用一个哈希数组,非常easy的小处理了。
代码:
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
const int N = 101000;
struct Node
{
int xi,yi;
}; Node mac[N];
Node pro[N];
int cmp(Node a,Node b)
{
if(a.xi!=b.xi)
return a.xi>b.xi;
if(a.yi!=b.yi)
return a.yi>b.yi;
}
int flag[120];
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=0;i<n;i++)
scanf("%d%d",&mac[i].xi,&mac[i].yi);
for(int i=0;i<m;i++)
scanf("%d%d",&pro[i].xi,&pro[i].yi);
sort(mac,mac+n,cmp);
sort(pro,pro+m,cmp);
memset(flag,0,sizeof(flag));
int tmp=-1;
long long ans=0,count=0;
for(int i=0,j=0;i<m;i++)
{
while(j<n&&mac[j].xi>=pro[i].xi)
{
flag[mac[j].yi]++;
j++;
}
for(int k=pro[i].yi;k<=100;k++)
{
if(flag[k])
{
flag[k]--;
ans++;
count+=(pro[i].xi*500+pro[i].yi*2);
break;
}
}
}
printf("%I64d %I64d\n",ans,count);
}
return 0;
}
/*
1 2
100 3
100 2
100 1
2 2
100 3
200 1
100 2
100 1
*/
hdoj4864 Task (贪心)的更多相关文章
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...
- 2014多校第一场D题 || HDU 4864 Task (贪心)
题目链接 题意 : 用N台机器,M个任务,每台机器都有一个最大工作时间和等级,每个任务有一个需要工作时间和一个等级.如果机器完成一个任务要求是:机器的工作时间要大于等于任务的时间,机器的等级要大于等于 ...
- HDU 4864 Task(贪心)
HDU 4864 Task 题目链接 题意:有一些机器和一些任务.都有时间和等级,机器能做任务的条件为时间等级都大于等于任务.而且一个任务仅仅能被一个机器做.如今求最大能完毕任务.而且保证金钱尽量多 ...
- hdu 4864 Task (贪心 技巧)
题目链接 一道很有技巧的贪心题目. 题意:有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间xi和等级yi, 对于每个任务,也有一个运行时间xj和等级yj.只有当xi& ...
- HDU4864:Task(贪心)
Problem DescriptionToday the company has m tasks to complete. The ith task need xi minutes to comple ...
- [HDU4864]Task (贪心)
此图和上一篇博客的图一起看有奇效 题意 https://vjudge.net/problem/HDU-4864 思路 贪心 代码 by lyd 我实在是敲不来 #include <iostrea ...
- hdu4864 Task贪心好题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4864 题目大意: 有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间 ...
- Codeforces 583 DIV2 Robot's Task 贪心
原题链接:http://codeforces.com/problemset/problem/583/B 题意: 就..要打开一个电脑,必须至少先打开其他若干电脑,每次转向有个花费,让你设计一个序列,使 ...
随机推荐
- 史上最全的Unity面试题(持续更新总结。。。。。。) 包含答案的Unity面试题
这个是我刚刚整理出的Unity面试题,为了帮助大家面试,同时帮助大家更好地复习Unity知识点,如果大家发现有什么错误,(包括错别字和知识点),或者发现哪里描述的不清晰,请在下面留言,我会重新更新,希 ...
- 前端必备工具-Emmet (Zen Coding)
Emmet 可以快速的编写 HTML 和 CSS,输入指令如: ul#nav>li*4>a*4 敲击一下TAB 键,就会输出: <ul id="nav"> ...
- linux ntfs模块
步骤: 1.在/usr/src/linux-2.4.18-3/configs/目录下 找适合自己机器的内核配置文件.我用的kernel-2.4.18-x86_64.config,把它拷贝到/usr/s ...
- redis主键失效机制
Memcached删除主键的方式与Redis有何异同 首先,Memcached 在删除失效主键时也是采用的消极方法,即 Memcached 内部也不会监视主键是否失效,而是在通过 Get 访问主键时才 ...
- thymleaf 常用th 标签
常用th标签都有那些? 关键字 功能介绍 案例 th:id 替换id <input th:id="'xxx' + ${collect.id}"/> th:text 文本 ...
- C 语言高效编程的几招——A few action of efficient C language programming
编写高效简洁的C 语言代码,是许多软件工程师追求的目标.本文就工作中的一些体会和经验做相关的阐述,不对的地方请各位指教. 第1 招:以空间换时间 计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个 ...
- Python基础(12)--模块
本文地址:http://www.cnblogs.com/archimedes/p/python-modules.html,转载请注明源地址. 模块简介 如果你退出 Python 解释器重新进入,以前创 ...
- 给 Easyui Datagrid 扩展方法
$.extend($.fn.datagrid.methods, { /** * 更新 非编辑列值 * @param rowIndex : 行索引 * @param cellName : 列索引或列名 ...
- 分享六个基于Bootstrap的实用开发教程和模板演示
关于Bootstrap,相信大家一定不陌生,它已经成为现在主流产业的一个重要工具,Bootstrap提供了优雅的HTML和CSS规范,它基于jQuery框架开发的,它在jQuery框架的基础上进行了更 ...
- UVA11402 - Ahoy, Pirates!(线段树)
UVA11402 - Ahoy, Pirates!(线段树) option=com_onlinejudge&Itemid=8&category=24&page=show_pro ...