任务调度问题(贪心) 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个任务.每个机器至多能完成一个任务.对于每个机器,有一个最大运行时间 ...
随机推荐
- DataX的使用——大数据同步技术
准备工作: 1.视频教学http://113.31.104.47/portal/#/course/dashboard/b34d160db64624732ef152a1118af11a 2.DataX的 ...
- win7无法访问局域网中其它计算机:0x80070035
https://zhidao.baidu.com/question/304232217962584564.html https://jingyan.baidu.com/article/ff411625 ...
- Numerical Testing Reportes of A New Conjugate Gradient Projection Method for Convex Constrained Nonlinear Equations
Numerical Testing Reportes of A New Conjugate Gradient Projection Method for Convex Constrained Nonl ...
- MySQL 8 拷贝MySQL数据库到另一台机器
通过mysqldump生成包含SQL语句的文件,然后将其应用到目标机器的mysql客户端程序. mysqldump --help 可以获取mysqldump选项以及用法. 如果源服务器上启用了GTID ...
- 使用ASP.NET Core 3.x 构建 RESTful API - 5.1 输入验证
说到验证,那就需要做三件事: 定义验证规则 按验证规则进行检查 报告验证的错误.在把错误报告给API消费者的时候,报告里并不包含到底是服务端还是API消费者引起的错误,这是状态码的工作.而通常响应的B ...
- Linux-redis安装以及客户端搭建
redis安装: 下载redis数据库,网址:redis官网 将文件放到home或者其他文件夹,cd到文件夹 执行 tar zxvf redis-4.0.2.tar.gz //解压文件 执行make进 ...
- hdu 1011 Starship Troopers(树上背包)
Problem Description You, the leader of Starship Troopers, are sent to destroy a base of the bugs. Th ...
- vue项目下的导入和导出
本篇博文主要记录我们在写项目的时候经常需要用到导入和导出. 导入 首先定义一个模态弹窗,一般情况下会使用一个input(设置opacity:0)覆盖在显示的按钮上面 <!-- 3.导入 --&g ...
- 白面系列 docker
在讲docker之前,首先区分2个概念,容器和虚拟机. 容器: 虚拟机: 简单来说,容器虚拟化操作系统:虚拟机虚拟化硬件. 容器粒度更小更灵活:虚拟机包含资源更多更大. docker就是用来做容器化的 ...
- Python 测试代码 初学者笔记
单元测试 每完成一个单元测试,Python都会打印一个字符: 测试通过打印一个句点:测试引发错误打印E:测试导致断言失败打印F 模块unittest import unittest from name ...