任务调度问题(贪心) hdu4864
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4864
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.
任务和机器都有两个属性,时长和等级。
只有机器的时长和等级都大于等于一项任务,机器才能完成这项任务。并且,
一项任务只能由一台机器完成,一台机器只能完成一项任务。( 每个任务有两个值花费时间x和难度y,)
我的代码:
#include<iostream> //任务调度的贪心问题
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll; struct node
{
int x,y; //x:花费时间;y:难度等级。
}s1[100005],s2[100005]; //机器数组s1,任务数组s2.
bool cmp(node a,node b)
{
return (a.x>b.x)||(a.x==b.x && a.y>b.y);
}//降序排序准则:按时间由大到小,时间相同则按等级由高到低。
//将任务按照权值1降序排序,权值1相同的按照权值二降序排序,将机器也同样是如此
/*在给任务选择机器的时候,在满足要求的机器中(机器的两个权值都大于任务的两个权值)选择权值1最给小的分配给该任务,
这样保证了后面任务做的可能性增大*/
int main()
{
int n,m,i,j,cnt;
ll sum;
while(~scanf("%d%d",&n,&m)) //输入机器数n,和任务数目m。
{
for(i=0;i<n;i++)
scanf("%d%d",&s1[i].x,&s1[i].y);
for(i=0;i<m;i++)
scanf("%d%d",&s2[i].x,&s2[i].y);
sort(s1,s1+n,cmp);
sort(s2,s2+m,cmp); //按时间由大到小,时间相同则按等级由高到低,将机器和任务分别排序。
//开始遍历任务: //sum:the money they will get.
//找出所有xi(xi>=xj),从中选择yi最小的一个作为这个任务的运行机器,
cnt=sum=0; //cnt:the maximum number of the tasks which the company can complete today ;
int c[105]={0}; //the level of the task的区间是[0,100]. c[]是任务难度等级数组。
for(i=0,j=0;i<m;i++) //j和n和机器为伍;i和m和任务为伍。
{
//对每一个任务而言:从第一个任务开始,挑选最合适的机器将其完成。
while(j<n && s1[j].x>=s2[i].x)
{
c[s1[j].y]++; //自增
j++;
} for(int k=s2[i].y;k<=100;k++)
{
if(c[k])
{
c[k]--; //最合适的原则是:时间大于该任务且等级最低。检索完所有的任务即可得到结果。 sum+=(s2[i].x*500+s2[i].y*2);
cnt++;
break; //break可以帮助退出这一层循环!
}
} //就是要这么贪心滴!
}
printf("%d %lld\n",cnt,sum);
}
return 0;
}
任务调度问题(贪心) hdu4864的更多相关文章
- hdu4864 hdu4268 贪心 lower_bound
hdu4864 题意: 有n个机器,m个任务,n,m<=100000,每个机器都有工作时间的最大限制xi(0<xi<1440)和完成的最大难度yi(0<=yi<=100) ...
- [HDU4864]Task (贪心)
此图和上一篇博客的图一起看有奇效 题意 https://vjudge.net/problem/HDU-4864 思路 贪心 代码 by lyd 我实在是敲不来 #include <iostrea ...
- POJ1723,1050,HDU4864题解(贪心)
POJ1723 Soldiers 思维题. 考虑y坐标,简单的货舱选址问题,选择中位数即可. 再考虑x坐标,由于直接研究布置方法非常困难,可以倒着想:不管如何移动,最后的坐标总是相邻的,且根据贪心的思 ...
- HDU4864:Task(贪心)
题意: 给出n个机器和m个任务,对于一天来说,每个机器有最大工作时间xi,可接受最大等级yi,每个任务有一个工作时间xi,一个等级yi,可获价值为500*xi+2*yi,任务需要在一台机器一天内完成, ...
- hdu4864不是一般的贪心
题目表达的非常清楚,也不绕弯刚开始以为最大权匹配,仔细一想不对,这题的数据双循环建图都会爆,只能先贪心试一下,但一想贪心也要双循环啊,怎么搞? 想了好久没头绪,后来经学长提醒,可以把没用到的先记录下来 ...
- ACM_区间调度问题(贪心)
Meetings 系列一 Time Limit: 2000/1000ms (Java/Others) Problem Description: 多年之后的广财ACM编协如日中天,下系多个部门,且编协成 ...
- hdu2037 今年暑假不AC[贪心][区间调度问题]
目录 题目地址 题干 代码和解释 参考 题目地址 hdu2037 题干 代码和解释 本题使用贪心.有三种贪心策略:开始时间最早,结束时间最早,用时最短.第二种是正确的策略,因为结束得越早,后面就可以有 ...
- hdu4864 贪心
题意: 给你n太机器,m个任务,每个任务和机器都有两个权值x,y,每个机器只能被一个任务使用,条件是机器的两个权值分别比任务的大于等于,每个任务获得的价值是x*500+y*2,问你最多能 ...
- hdu4864 Task贪心好题
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4864 题目大意: 有n个机器,m个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间 ...
随机推荐
- PWN之Canary学习
Canary 参考链接:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/mitigation/canary-zh/ 0x1 简介: 用于防止栈溢出被利用的一 ...
- Java Web Servlet知识点讲解(二)
一.定义Servlet: public class HelloServlet extends HttpServlet { @Override protected void doGet(HttpSer ...
- spring cloud微服务快速教程之(十) gateway 服务网关
0.前言 gateway是spring的二代网关, 作为Netflix Zuul的替代者,是异步非阻塞网关 ,ZUUL2也是异步非阻塞的,但未纳入spring cloud整合计划 基于WebFlux ...
- windows获取所有连接过的无线网密码
一.打开命令行工具:win+R 输入cmd 回车进入: for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show pr ...
- The Ether 靶场
0x01 首先对靶场进行端口扫描 发现只开启了80端口和22端口 0x02 目录扫描 访问了几个目录并没有什么发现 0x03 访问主页几个网站链接 发现了一个疑似文件包含的漏洞 0x04 抓包进行分析 ...
- 个性化和云端孤岛困扰SaaS用户,低代码PaaS或成解决之道 ZT
近日,中国软件行业协会.中国软件网联合阿里云推出了<2020中国SaaS产业十大趋势>,其中明确指出企业软件SaaS化是大势所趋,但个性化和云端孤岛成为2020年SaaS用户关注的两大问题 ...
- MySQL 8 复制
MySQL 8.0 支持的复制方法: 传统方法(基于二进制日志文件位置) 新方法(基于GTID) MySQL 8.0 支持的同步类型: 异步复制(内置) 同步复制(NDB集群) 半同步复制(半同步复制 ...
- W25Q64BV(FLASH)(SPI)中文手册
64兆位串行SPI FLASH存储器 1.常规介绍 W25Q64BV(64兆位)串行FLASH存储器为一个空间大小,引脚,功耗限制的系统提供解决方案.25Q系列的灵活性和性能良好超越了普通的串行FLA ...
- Zabbbix之十二------Zabbix实现微信报警通知及创建聚合图形
实战一:实现zabbix监控微信报警 1.在企业微信上注册账号 1.注册企业微信,管理员需要写上自己的真实姓名,扫描以下的二维码,与微信关联真实姓名. 2.登陆企业微信,然后创建一个微信故障通知应用 ...
- ng-项目结构
ng启动过程 目录结构 . ├── e2e 端到端测试(暂且不关心) ├── node_modules npm安装的第三方包 ├── src 存放业务源码 ├── .angular-cli.json ...