hdu4864 贪心
来源:互联网 发布:天刀动漫人物捏脸数据 编辑:程序博客网 时间:2024/06/05 00:21
题意:
给你n太机器,m个任务,每个任务和机器都有两个权值x,y,每个机器只能被一个任务使用,条件是机器的两个权值分别比任务的大于等于,每个任务获得的价值是x*500+y*2,问你最多能完成多少任务,在完成任务最多的条件下,最多能获得多少价值。
思路:
一开始没想到是贪心,我读完题第一感觉就是费用流啊!后来一看数据,费用流不行(如果数据小点费用流果断能简单处理),后来别人说是贪心,我很不理解,贪心如果只是求最大的个数我可以求,也可以理解,但怎么保证最大价值呢?蛋疼,怪我没有注意那个公式v = x*500 + y * 2 哎!,sb了,人家不可能随便给你个式子啊,y的范围是<=100的,也就是说y怎么样也没有x变化1价值增加的多,所以我们要优先保护x,所以在二级排序的时候先以x,在y,这样就可以在保证个数最大的情况下价值最大了,整个过程还是简单贪心,排
序的条件是这样的
return a.x>b.x || a.x==b.x&&a.y>b.y || a.x==b.x && a.y==b.y &&a.v>b.v
v是我自己虚拟出来的,机器是1,任务是0,为了吧机器放在前面
然后for循环处理,从大到小,每个任务都要被他前面的机器中能处理他中y最小的那个处理。更新到最后就行了。
#include<stdio.h>#include<string.h>#include<algorithm>#include<set>using namespace std;typedef struct{ int x ,y ,v;}NODE;NODE node[220000];set<int>my_set;int set_num[105];bool camp(NODE a ,NODE b){ return a.x > b.x || a.x == b.x && a.y > b.y || a.x == b.x && a.y == b.y && a.v > b.v;}int main (){ int n ,m ,i ; __int64 ans1 ,ans2; while(~scanf("%d %d" ,&n ,&m)) { for(i = 1 ;i <= n ;i ++) { scanf("%d %d" ,&node[i].x ,&node[i].y); node[i].v = 1; } for(i = 1 ;i <= m ;i ++) { scanf("%d %d" ,&node[i+n].x ,&node[i+n].y); node[i+n].v = 0; } sort(node + 1 ,node + n + m + 1 ,camp); my_set.clear(); my_set.insert(1050); memset(set_num ,0 ,sizeof(set_num)); for(ans1 = ans2 = 0 ,i = 1 ;i <= n + m ;i ++) { if(node[i].v) { my_set.insert(node[i].y); set_num[node[i].y] ++; } else { int now = *my_set.lower_bound(node[i].y); if(now != 1050) { ans1 += (__int64)(node[i].x * 500) + (__int64)(2 * node[i].y); ans2 ++; if(!(--set_num[now])) my_set.erase(now); } } } printf("%I64d %I64d\n" ,ans2 ,ans1); } return 0;}
0 0
- HDU4864 贪心
- hdu4864 贪心
- 贪心 hdu4864
- hdu4864 贪心
- hdu4864(贪心)
- HDU4864:Task(贪心)
- hdu4864(贪心)
- hdu4864 task 贪心
- 贪心——HDU4864
- 贪心 hdu4864 Task
- hdu4864 Task(贪心)
- hdu4864(贪心)
- hdu4864不是一般的贪心
- HDU4864
- HDu4864
- HDU4864
- hdu4864 贪心+平衡二叉搜索树(map)
- HDU4864(机器数和任务数、贪心)
- C#调用C++生成的dll获取CPU序列号(一)
- C语言的本质(34)——静态库
- Android获取手机的型号和系统版本
- 设置系统时间
- 关于Apache的日志
- hdu4864 贪心
- 概率p输出1,概率1-p输出0,等概率输出0和1
- 背包问题
- Effective C# Item13:使用静态构造器初始化静态类成员
- Android Launcher研究(四)-----------桌面应用快捷方式的开发!
- Qt判断大小写键Caps Lock状态
- 杭电2020第一次PE因为忘记printf("\n");冒泡排序
- Vmware vSphere 5.0系列教程之一 Vmware vSphere 5.0简介
- 内存申请释放频繁问题