HDU4864:Task(贪心)
题意:
给出n个机器和m个任务,对于一天来说,每个机器有最大工作时间xi,可接受最大等级yi,每个任务有一个工作时间xi,一个等级yi,可获价值为500*xi+2*yi,任务需要在一台机器一天内完成,问我们一天可得到的最大价值。
思路:
由于xi的系数500远大于yi的系数,故只要使xi最大,总价值一定最大。
所以我们从任务开始贪心而不选择从机器开始贪心,将任务和机器以时间从大到小,相同则使等级从大到小进行排序,然后对于每一个任务,记录工作时间大于它的机器,然后从任务的等级开始往上搜,搜到即记录并跳出,最后输出即可。
推荐blog:
http://blog.csdn.net/a601025382s/article/details/38046927
http://www.cnblogs.com/-sunshine/p/3862810.html
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1e5+; int n,m,maxx,sum,coun;
struct node
{
int time,level;
bool operator<(const node& p)const
{
if(time==p.time) return level>p.level;
return time>p.time;
}
}a[maxn],b[maxn];
int c[]; int main()
{
while(scanf("%d%d",&n,&m)==)
{
coun=;
__int64 sum=;
for(int i=;i<=n;i++) {scanf("%d%d",&a[i].time,&a[i].level);}
for(int i=;i<=m;i++) {scanf("%d%d",&b[i].time,&b[i].level);}
sort(a+,a+n+);sort(b+,b+m+);
memset(c,,sizeof(c));
//for(int i=1;i<=n;i++) printf("%d %d\n",a[i].time,a[i].level);
//for(int i=1;i<=m;i++) printf("%d %d\n",b[i].time,b[i].level);
for(int i=,j=;i<=m;i++)
{
while(j<=n&&a[j].time>=b[i].time)//统计>=当前任务时间的机器
{
c[a[j].level]++;//记录机器的等级
j++;
}
for(int k=b[i].level;k<=;k++)//从当前任务的等级开始
{
if(c[k])//找到最小的等级
{
coun++;
c[k]--;
sum+=*b[i].time+*b[i].level;
break;
}
}
}
printf("%d %I64d\n",coun,sum);
}
return ;
}
HDU4864:Task(贪心)的更多相关文章
- [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个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间 ...
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- HDU4864:Task(贪心)
Problem DescriptionToday the company has m tasks to complete. The ith task need xi minutes to comple ...
- hdu4864 hdu4268 贪心 lower_bound
hdu4864 题意: 有n个机器,m个任务,n,m<=100000,每个机器都有工作时间的最大限制xi(0<xi<1440)和完成的最大难度yi(0<=yi<=100) ...
- HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...
- 2014多校第一场D题 || HDU 4864 Task (贪心)
题目链接 题意 : 用N台机器,M个任务,每台机器都有一个最大工作时间和等级,每个任务有一个需要工作时间和一个等级.如果机器完成一个任务要求是:机器的工作时间要大于等于任务的时间,机器的等级要大于等于 ...
- HDU4864 Task(算竞进阶习题)
贪心 比较巧妙的贪心..先把所有机器和任务按时间是第一关键字,等级为第二关键字排序. 然后用机器去匹配每一个任务. 排序之后,在时间上满足当前任务的机器,必定也在时间上满足后面的机器,所以我们每次把时 ...
- HDU 4864 Task(贪心)
HDU 4864 Task 题目链接 题意:有一些机器和一些任务.都有时间和等级,机器能做任务的条件为时间等级都大于等于任务.而且一个任务仅仅能被一个机器做.如今求最大能完毕任务.而且保证金钱尽量多 ...
- HDU4864 Task
题意 Today the company has m tasks to complete. The ith task need xi minutes to complete. Meanwhile, t ...
随机推荐
- IOS刷新数据
在一个项目开发过程中为了更好的体验经常会用到下拉刷新更新数据,当然也伴随一些上拉加载更多数据的情况:当前比较火的EGOTableViewPullRefresh只实现了下拉功能,而没有上拉的功能.这里介 ...
- java知识积累——单元测试和JUnit(二)
首先来复习一下几个重要知识点,然后接着进行一些介绍.在上一篇文章中,我曾经贴过下面这张图片: 在Which method stubs would you like to create?这里,现在结合4 ...
- Builder创建者模式
http://www.codeproject.com/Articles/42415/Builder-Design-Pattern In Elizabeth's day care center, the ...
- c# webbrowser 随机点击链接 2
找到广告代码所在的div或table ,然后用WebBrowser执行js去点这个div(或table) 那个广告是js实现的,你浏览的时候是看不到图片和连接的,请问各位大虾应该怎么实现?给点思路.. ...
- 信息:Could not publish server configuration for Tomcat v6.0 Server at localhost. Multiple Context
需要把server.xml更正一下,去掉重复的context.或者把整个server文件夹都删掉,重新添加服务器.也可以在server窗口中删除server,再新添加一个server.
- bzoj2829
裸题,直接上凸包,然后加上一个圆周即可 只是在这之前没写过旋转而已 const pi=3.14159265358979323; eps=1e-8; type point=record x,y:doub ...
- CodeForces Round #280 (Div.2)
A. Vanya and Cubes 题意: 给你n个小方块,现在要搭一个金字塔,金字塔的第i层需要 个小方块,问这n个方块最多搭几层金字塔. 分析: 根据求和公式,有,按照规律直接加就行,直到超过n ...
- js 时间转成时间戳对比;My97DatePicker日历控件时间格式;Date.parse Firefox火狐浏览器返回Nan的解决办法
有个情况,我在显示时间的时候是需要显示为 2013年8月15日 14时28分15秒 但是假如我用js去获取到这个时间,并且想进行时间对比的时候,这个时间2013年8月15日 14时28分15秒根本就 ...
- UVA 11374 Airport Express(最短路)
最短路. 把题目抽象一下:已知一张图,边上的权值表示长度.现在又有一些边,只能从其中选一条加入原图,使起点->终点的距离最小. 当加上一条边a->b,如果这条边更新了最短路,那么起点st- ...
- Java [Leetcode 189]Rotate Array
题目描述: Rotate an array of n elements to the right by k steps. For example, with n = 7 and k = 3, the ...