博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4268 Alice and Bob(贪心+Multiset的应用)
阅读量:5935 次
发布时间:2019-06-19

本文共 1326 字,大约阅读时间需要 4 分钟。



题意: Alice和Bob有n个长方形,有长度和宽度,一个矩形能够覆盖还有一个矩形的条件的是,本身长度大于等于还有一个矩形,且宽度大于等于还有一个矩形。矩形不可旋转。问你Alice最多能覆盖Bob的几个矩形?

思路:贪心,先依照h将Alice和Bob的矩形排序,对于Alice的每一个矩形。假设Bob的矩形的h小于Alice的h,将Bob的w插入到集合中。

然后,在集合中找到不大于Alice矩形d的最大的Bob的d,那么这样做肯定是最优的。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define eps 1e-6 #define LL long long using namespace std; //const int maxn = 100 + 5;//const int INF = 0x3f3f3f3f;struct Card { int h, d;};Card ca[100010], cb[100010];bool cmp1(Card A, Card B) { return A.h < B.h;}multiset
ms;int main() {// freopen("input.txt", "r", stdin); int t; cin >> t; int n; while(t--) { cin >> n; ms.clear(); for(int i = 0; i < n; i++) scanf("%d%d", &ca[i].h, &ca[i].d); for(int i = 0; i < n; i++) scanf("%d%d", &cb[i].h, &cb[i].d); sort(ca, ca+n, cmp1); sort(cb, cb+n, cmp1); int pos = 0, ans = 0; for(int i = 0; i < n; i++) { while(pos < n) { if(ca[i].h >= cb[pos].h) { ms.insert(cb[pos].d); pos++; } else break; } if(ms.empty()) continue; multiset
::iterator it = ms.upper_bound(ca[i].d); if(it != ms.begin()) { ans++; ms.erase(--it); } } cout << ans << endl; } return 0;}

转载于:https://www.cnblogs.com/clnchanpin/p/6925435.html

你可能感兴趣的文章
Samba再报安全漏洞
查看>>
我的友情链接
查看>>
我的友情链接
查看>>
Spring学习资料之 依赖注入(一)
查看>>
安装win7提示安装程序无法创建新的系统分区和定位现有系统分区
查看>>
那些年,我跳过的坑(一)
查看>>
快递查询接口的调用与解析案例
查看>>
我的友情链接
查看>>
【MYSQL】SQL基本写法
查看>>
服务器性能优化配置建议
查看>>
物理网卡在ESXi/ESX服务器中的推荐配置方式
查看>>
实战浪潮英信服务器web部署操作过程(3)
查看>>
Linux基础(11)文本处理三剑客之sed
查看>>
Zabbix3.2.6之通过JMX监控Tomcat
查看>>
重新定义工作站的“边界”
查看>>
第三方推送已死
查看>>
回档|神经网络
查看>>
Apache Spark源码走读之12 -- Hive on Spark运行环境搭建
查看>>
阿里云跨服务器文件拷贝
查看>>
GetWindowRect
查看>>