2014多校第一场D题 || HDU 4864 Task (贪心)
题意 : 用N台机器,M个任务,每台机器都有一个最大工作时间和等级,每个任务有一个需要工作时间和一个等级。如果机器完成一个任务要求是:机器的工作时间要大于等于任务的时间,机器的等级要大于等于任务的等级。一台机器只能完成一个任务,一个任务只能被一台机器完成。每个机器完成一个任务公司能够获得500*xi+2*yi (此处xy都是指被完成的任务的)。输出所有机器能完成的最多任务数,和最大盈利。
思路 :贪心,自己做的时候想了各种排序都不对,没有考虑到500*xi+2*yi 这个公式的重要性。。。。把每个任务找出能完成的机器,用最接近的机器去做任务,保证最后的结果最大
官方题解 :
基本思想是贪心。
对于价值c=500*xi+2*yi,yi最大影响100*2<500,所以就是求xi总和最大。可以先对机器和任务的时间从大到小排序。从最大时间的任务开始,找出满足任务时间要求的所有机器,从中找出等级最低且满足任务等级要求的机器匹配。依次对任务寻找满足要求的机器。
#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm> using namespace std ; struct node
{
int time;
int level ;
} task[] ,mach[] ; int vis[] ; int cmp(const node a,const node b)
{
if(a.time == b.time) return a.level > b.level ;
return a.time > b.time ;
} int main()
{
int N,M ;
while(~scanf("%d %d",&N,&M))
{
for(int i = ; i < N ; i++)
{
scanf("%d %d",&mach[i].time,&mach[i].level) ;
}
for(int i = ; i < M ; i++)
scanf("%d %d",&task[i].time,&task[i].level) ;
sort(mach,mach+N,cmp) ;
sort(task,task+M,cmp) ;
memset(vis,,sizeof(vis)) ;
int cnt = ;
long long ans = ;
for(int i = , j = ; i < M ; i++)
{
while(j < N && mach[j].time >= task[i].time)
{
vis[mach[j].level] ++ ;
j++ ;
}
for(int k = task[i].level ; k <= ; k++ )
{
if(vis[k])
{
vis[k]-- ;
cnt ++ ;
ans += task[i].time * + * task[i].level ;
break ;
}
}
}
printf("%d %I64d\n",cnt,ans) ;
}
return ;
}
鹏哥他们用的STL的set
#include <iostream>
#include<stdio.h>
#include<set>
#include<vector>
#include<algorithm>
using namespace std;
#define LL long long
struct list
{
int x;
int y;
int s;
int leap;
friend bool operator <(const list &a,const list &b)
{
if(a.y!=b.y)return a.y<b.y;
else if(a.x!=b.x)return a.x<b.x;
else return a.leap<b.leap;
}
}node[];
multiset<int>st;
multiset<int>::iterator it;
int sea(int x)
{
if(st.size()==)return ;
it=st.begin();
if(x<(*it))return ;
it=st.lower_bound(x);
if(it==st.end())
{
it=st.end();
it--;
int ans=(*it);
st.erase(it);
return ans;
}
if((*it)==x)
{
st.erase(it);
return x;
}
it--;
int ans=(*it);
st.erase(it);
return ans;
}
void dos(int n)
{
int x=;
LL sum=;
st.clear();
for(int i=;i<=n;i++)
{
if(node[i].leap==)
{
int res=sea(node[i].s);
if(res)
{
x++;
sum+=(LL)res;
}
}
else
{
st.insert(node[i].s);
}
}
cout<<x<<" "<<sum<<endl;
}
int main()
{
int n,m;
while(~scanf("%d%d",&n,&m))
{
for(int i=;i<=n;i++)
{
scanf("%d%d",&node[i].x,&node[i].y);
node[i].leap=;
node[i].s=node[i].x*+node[i].y*;
}
for(int i=n+;i<=n+m;i++)
{
scanf("%d%d",&node[i].x,&node[i].y);
node[i].leap=;
node[i].s=node[i].x*+node[i].y*;
}
sort(node+,node+n+m+);
dos(n+m);
}
return ;
}
2014多校第一场D题 || HDU 4864 Task (贪心)的更多相关文章
- 2014多校第一场J题 || HDU 4870 Rating(DP || 高斯消元)
题目链接 题意 :小女孩注册了两个比赛的帐号,初始分值都为0,每做一次比赛如果排名在前两百名,rating涨50,否则降100,告诉你她每次比赛在前两百名的概率p,如果她每次做题都用两个账号中分数低的 ...
- 2014多校第一场 E 题 || HDU 4865 Peter's Hobby (DP)
题目链接 题意 : 给你两个表格,第一个表格是三种天气下出现四种湿度的可能性.第二个表格是,昨天出现的三种天气下,今天出现三种天气的可能性.然后给你这几天的湿度,告诉你第一天出现三种天气的可能性,让你 ...
- 2014多校第一场A题 || HDU 4861 Couple doubi
题目链接 题意 : 有K个球,给你一个数P,可以求出K个值,(i=1,2,...,k) : 1^i+2^i+...+(p-1)^i (mod p).然后女朋友先取,再xp取,都希望赢,如果女朋友能赢输 ...
- 2014多校第一场 I 题 || HDU 4869 Turn the pokers(费马小定理+快速幂模)
题目链接 题意 : m张牌,可以翻n次,每次翻xi张牌,问最后能得到多少种形态. 思路 :0定义为反面,1定义为正面,(一开始都是反), 对于每次翻牌操作,我们定义两个边界lb,rb,代表每次中1最少 ...
- 2019年牛客多校第一场B题Integration 数学
2019年牛客多校第一场B题 Integration 题意 给出一个公式,求值 思路 明显的化简公式题,公式是分母连乘形式,这个时候要想到拆分,那如何拆分母呢,自然是裂项,此时有很多项裂项,我们不妨从 ...
- Hdu 4864(Task 贪心)(Java实现)
Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...
- HDU 4864 Task(贪心)
HDU 4864 Task 题目链接 题意:有一些机器和一些任务.都有时间和等级,机器能做任务的条件为时间等级都大于等于任务.而且一个任务仅仅能被一个机器做.如今求最大能完毕任务.而且保证金钱尽量多 ...
- 【2019多校第一场补题 / HDU6578】2019多校第一场A题1001Blank——dp
HDU6578链接 题意 有一串字符串,仅由 {0,1,2,3}\{0, 1, 2, 3\}{0,1,2,3} 组成,长度为 nnn,同时满足 mmm 个条件.每个条件由三个整数组成:l.r.xl.r ...
- HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...
随机推荐
- Template_17_metaprogram
1,模板实例化机制是一种基本的递归语言机制,可以用于在编译期执行复杂计算.2,枚举值和静态常量在原来的C++编译器中,在类声明的内部,枚举值是声明"真常值"(常量表达式)的唯一方法 ...
- iOS 系统架构及常用框架
1.iOS基于UNIX系统,因此从系统的稳定性上来说它要比其他操作系统的产品好很多 2.iOS的系统架构分为四层,由上到下一次为:可触摸层(Cocoa Touch layer).媒体层(Media l ...
- wap网站seo如何优化呢?
从事互联网的人员都知道移动互联网营销是一个大的趋势,但是要怎么去做恐怕还都一筹莫展.由PC端的网络营销的经验和常识来看,首要的是要做好移动端手机网站的优化工作.据观察分析,目前国内的大多数并没有做好手 ...
- linux的7种运行级别
Linux有7个运行级别(runlevel)运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆运行级别2:多用户 ...
- 初步了解SequoiaDB数据库
随着企业中日益复杂与多变的需求,以及迅速扩展带来的海量数据的业务,IT部门需要将越来越多的信息提供给用户,同时在现今的全球经济背景环境下,IT部 门还需要在提供高效服务的同时,降低其设备与程序维护成本 ...
- RHEL安装docker-compose
Note that Compose 1.5.2 requires Docker 1.7.1 or later. pip install docker-compose==1.5.2 Note that ...
- JS获取图片实际宽高及根据图片大小进行自适应
JS获取图片实际宽高,以及根据图片大小进行自适应 <img src="http://xxx.jpg" id="imgs" onload="ad ...
- 服务管理,Dll查看
//枚举系统进程 VOID CManageProcessDlg::ShowProcess() { m_ListProcess.DeleteAllItems(); HAND ...
- Eclipse 代码提示功能设置。
1. 解决实例化时自动补全不必要的单词问题 2. 以MyEclipse 6.5重新配图 鉴 于网上的批评之声甚大,我只想说明我的想法:这样的增强代码提示,最终是用来辅助我们 ...
- 错误信息:未在本地计算机上注册“microsoft.ACE.oledb.12.0”提供程序。
下载2007 Office system 驱动程序:数据连接组件安装 http://download.microsoft.com/download/7/0/3/703ffbcb-dc0c-4e19-b ...