贪心题。

贪心方法很是naive......

首先我们就能注意到一个性质:优先选择时间(x)长的,然后才是等级(y)。

所以我们把机器和任务排好序,从大到小枚举任务。对于每一个x满足的机器,x也一定满足后面的任务。所以我们只关注y即可。

在所有x符合的机器中选择y最小的满足条件的机器即可。

怎么选出来这台机器呢?枚举是n^2,不可取。堆运气不好的情况下是n^2 * logn,更差。我只能想到splay.....

后来得到指点:你开个vis数组JINHI……C#@BP909uawmaUWrbn089w3w309r3907502%*&¥*……Xh

我一看范围:1440, 这显然就是正解。于是开一个sum数组表示y为sum的可用机器有多少台。

然后就A了!

 #include <cstdio>
#include <algorithm>
#include <cstring>
using std::pair;
using std::sort;
const int N = , F = ; int sum[F];
pair<int, int> ma[N], ta[N]; int main() {
int n, m;
while(scanf("%d%d", &m, &n) != EOF) {
memset(sum, , sizeof(sum));
for(int i = ; i <= m; i++) {
scanf("%d%d", &ma[i].first, &ma[i].second);
}
for(int i = ; i <= n; i++) {
scanf("%d%d", &ta[i].first, &ta[i].second);
}
sort(ma + , ma + m + );
sort(ta + , ta + n + );
int j = m;
long long ans = , a = ;
for(int i = n; i >= ; i--) {
while(j && ma[j].first >= ta[i].first) {
sum[ma[j].second]++;
j--;
}
int temp = ta[i].second;
while(temp < F && !sum[temp]) {
temp++;
}
if(temp == F) continue;
sum[temp]--;
ans += * ta[i].first + * ta[i].second;
a++;
}
printf("%lld %lld\n", a, ans);
} return ;
}

AC代码

HDU/HDOJ 4864 Task的更多相关文章

  1. hdu 4864 Task(贪婪啊)

    主题链接:pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS ...

  2. HDU 4864 Task(贪心)

    HDU 4864 Task 题目链接 题意:有一些机器和一些任务.都有时间和等级,机器能做任务的条件为时间等级都大于等于任务.而且一个任务仅仅能被一个机器做.如今求最大能完毕任务.而且保证金钱尽量多 ...

  3. HDU 4864 Task(经典贪心)

    传送门: http://acm.hdu.edu.cn/showproblem.php?pid=4864 Task Time Limit: 4000/2000 MS (Java/Others)    M ...

  4. Hdu 4864(Task 贪心)(Java实现)

    Hdu 4864(Task 贪心) 原题链接 题意:给定n台机器和m个任务,任务和机器都有工作时间值和工作等级值,一个机器只能执行一个任务,且执行任务的条件位机器的两个值都大于等于任务的值,每完成一个 ...

  5. 二分+DP HDU 3433 A Task Process

    HDU 3433 A Task Process Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  6. hdu 3433 A Task Process 二分+dp

    A Task Process Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) T ...

  7. HDU 4864 Task (贪心+STL多集(二分)+邻接表存储)(杭电多校训练赛第一场1004)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4864 解题报告:有n台机器用来完成m个任务,每个任务有一个难度值和一个需要完成的时间,每台机器有一个可 ...

  8. hdu 4864 Task

    题目链接:hdu 4864 其实就是个贪心,只是当初我想的有偏差,贪心的思路不对,应该是这样子的: 因为 xi 的权值更重,所以优先按照 x 来排序,而这样的排序方式决定了在满足任务(即 xi > ...

  9. hdu 4864 Task(贪心)

    pid=4864">http://acm.hdu.edu.cn/showproblem.php?pid=4864 大致题意:有n台机器和m个任务,都有两个參数工作时间time和难度le ...

随机推荐

  1. Mybatis测试用例

    package cn.zhangxueliang.mybatis.mapper; import static org.junit.Assert.*; import java.io.InputStrea ...

  2. Codeforces 1154G Minimum Possible LCM

    题目链接:http://codeforces.com/problemset/problem/1154/G 题目大意: 给定n个数,在这些数中选2个数,使这两个数的最小公倍数最小,输出这两个数的下标(如 ...

  3. @PathVariable

    @PathVariable是用来对指定请求的URL路径里面的变量 eg: Java代码 @RequestMapping(value = "form/{id}/apply", met ...

  4. fiddler学习笔记2 字段说明;移动设备、解密证书

    # :           抓取顺序从1开始递增 result:    http 请求状态 protocol:   请求使用的协议如:http https ftp Host:         请求地址 ...

  5. 在Linq to sql 和 Entity framework 中使用lambda表达式实现left join

    在Linq to sql 和 Entity framework 中使用lambda表达式实现left join 我们知道lambda表达式在Linq to sql 和 Entity framework ...

  6. Python getattr() 函数

    Python getattr() 函数  Python 内置函数 描述 getattr() 函数用于返回一个对象属性值. 语法 getattr 语法: getattr(object, name[, d ...

  7. BZOJ1208[HNOI2004]宠物收养场——treap

    凡凡开了一间宠物收养场.收养场提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物. 每个领养者都希望领养到自己满意的宠物,凡凡根据领养者的要求通过他自己发明的一个特殊的公式,得出该领养者希望领 ...

  8. Django+Vue打造购物网站(三)

    商品列表页 通过商品列表页面来学习drf django的view实现商品列表页 在goods目录下新建一个views_base.py文件,用来区分drf的view和Dajngo自带的view的区别 利 ...

  9. 对strom的理解

    1.什么是strom: storm是一个分布式实时计算系统,用户只需要提供自己的插件(例如一个jar包,其中编写用户自己的逻辑代码),然后将它部署到storm服务器上,storm的master服务器就 ...

  10. Escape HDU - 3605(归类建边)

    Escape Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Subm ...