任务调度问题(贪心) 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个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间 ...
随机推荐
- Git安装与配置,以及pycharm提交代码到github
1.下载git,安装 下载好后直接下一步到底,安装成功(选择组件页面,可以勾选上控制台窗口字体选项,如下图) 2.配置Git信息 1.打开窗口中,输入:git --version 查看已安装的git版 ...
- Centos7内核版安装nginx环境问题及解决方法
错误信息:./configure: error: C compiler cc is not found解决方案:yum -y install gcc gcc-c++ autoconf automake ...
- CentOS7 GlusterFS文件系统部署
一.GlusterFS简介 GlusterFS(GNU ClusterFile System)是一种全对称的开源分布式文件系统,所谓全对称是指GlusterFS采用弹性哈希算法,没有中心节点,所有节点 ...
- Python 获取本地主机信息
import wmi c = wmi.WMI() for sys in c.Win32_OperatingSystem(): #系统信息 print(sys.Caption) #系统版本号 print ...
- .NetCore学习笔记:四、AutoMapper对象映射
什么是AutoMapper?AutoMapper是一个简单的小型库,用于解决一个看似复杂的问题 - 摆脱将一个对象映射到另一个对象的代码.这种类型的代码是相当沉闷和无聊的写,所以为什么不发明一个工具来 ...
- vue-socket.io跨域问题的解决方法
报错信息: Access to XMLHttpRequest at 'http://192.168.37.130:5050/socket.io/?EIO=3&transport=polling ...
- Linux学习记录(一):常用命令
此篇文章为博主在Linux学习过程中的一些记录,记录在此方便查阅. 常用命令总结 ls 显示目录内容 (list directory contents) ls 不显示隐藏的文件和子目录 ls -a 显 ...
- js获取时间及转化
有关Javascript的本地时间获取,下面我直接用代码来进行举例吧 let time = new Date(); let month = time.getMonth()+1; //获取的月份0~11 ...
- Bash脚本编程学习笔记05:用户交互与脚本调试
用户交互 在<学习笔记04>中我们有提到位置参数,位置参数是用来向脚本传递参数的一种方式.还有一种方式,是read命令. [root@c7-server ~]# read name alo ...
- springboot web - 启动(2) run()
接上一篇 在创建 SpringApplication 之后, 调用了 run() 方法. public ConfigurableApplicationContext run(String... arg ...