题意:    

   给你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;
}

hdu4864 贪心相关推荐

  1. 算法设计与分析第3章 贪心算法

    第4章 贪心算法 贪心算法总是作出在当前看来最好的选择.也就是说贪心算法并不从整体最优考虑,它所作出的选择只是在某种意义上的局部最优选择. 贪心算法的基本要素 1.贪心选择性质 所谓贪心选择性质是指所 ...

  2. 贪心算法单源点最短路径例题c语言源代码,Dijkstra算法是解单源最短路径问题的一个贪心算法...

    问题描述 给定一个带权有向图 G=(V,E) ,其中每条边的权是一个非负实数. 另外,还给定 V 中的一个项点,称为源. 现在我们要计算从源到所有其他各项点的最短路径长度. 这里的长度是指路上各边权之 ...

  3. Too Many Segments CF595D 贪心乱搞

    传送门! 比赛的时候没有时间写了,看看了看大佬的代码,学习学习. 一开始实验室大佬说是用差分写的,但是看了代码发现打cf的人大家都是stl狂魔! 贪心思路:区间按照左端点排序,从1~2e5遍历每一个点 ...

  4. Roundgod and Milk Tea 贪心

    这个题好像可以用一种类似与置换的贪心方法来做~ sum记为剩余奶茶,一开始sum等于奶茶和 ans记录已经喝的奶茶数 不用排序,我们就从前往后直接处理,考虑的是每一个班最多可以喝多少杯奶茶 就是从剩余 ...

  5. 贪心算法简单实践 -- 分糖果、钱币找零、最多区间覆盖、哈夫曼编解码

    1. 贪心算法概览 贪心算法是一种算法思想.希望能够满足限制的情况下将期望值最大化.比如:Huffman编码,Dijkstra单源最短路径问题,Kruskal最小生成树 等问题都希望满足限制的情况下用 ...

  6. 贪心:expedition 最优加油方法

    已知一条公路上,有一个起点与一个终点,这之间有n个加油站;已知从这n个加 油站到终点的距离d与各个加油站可以加油的量l,起点位置至终点的距离L与起 始时刻油箱中汽油量P;假设使用1个单位的汽油即走1个 ...

  7. 贪心:Burst Balloons 最少次数完成射击气球

    已知在一个平面上有一定数量的气球,平面可以看作一个坐标系,在平面的x轴的不同位 置安排弓箭手向y轴方向射箭,弓箭可以向y轴走无穷远;给定气球的宽度 xstart ≤ x ≤ xend,问至少需要多少弓 ...

  8. 贪心:jump 游戏(获取最少跳跃的次数以及跳跃路径)

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回最少 ...

  9. 贪心:Jump Game 跳跃游戏

    一个数组存储了非负整型数据,数组中的第i个元素a[i],代表了可以从数组第i个 位置最多向前跳跃a[i]步;已知数组各元素的情况下,求是否可以从数组的第0个位置跳跃到数组的最后一个元素的位置,返回是t ...

最新文章

  1. React Native开发环境搭建
  2. jquery中的left和top
  3. select + 线程池 回应服务器(windows)
  4. latex的基本使用
  5. python求50的阶乘_python如何求阶乘
  6. 莎拉波娃美网新赛服亮相
  7. access 此程序未正确安装_SQLite简介与安装
  8. linux mysql 5.7.13 安装_Linux环境下mysql5.7.13安装教程
  9. JAVA学习笔记之复用类之重载和重写
  10. 数据可视化:Metabase
  11. 解决报错 Initialize failed: invalid dom.
  12. 峰值信噪比公式_数字音频水印——峰值信噪比PSNR与信噪比SNR的问题。求告之!求代码!...
  13. 地面监视雷达系统的设计与试验
  14. pg数据库的一些问题
  15. git 解决合并冲突
  16. VC++使用管道重定向进程输入输出(附源码)
  17. Typora自定义主题
  18. CEPH告警:health_warn 45 pgs degraded;60 pgs unclean; 45 pgs undersized
  19. 刮刮奖效果的简单实现
  20. python opencv resize函数_OpenCV尺寸调整函数resize

热门文章

  1. Django 获取前端发送的头文件
  2. enum类型被intent所携带时需要注意的地方
  3. ORACLE SEQUENCE 介绍
  4. 离散数学及其应用第6版中文版勘误
  5. 用一句sql语句更新两个表并可更新对应的字段的值
  6. 前端(二)之 CSS
  7. 第44节:Java当中的JVM
  8. 设计模式之:适配器模式
  9. tideways+xhgui搭建php 7的性能测试环境
  10. 【Linux开发】linux设备驱动归纳总结(七):2.内核定时器