博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SPOJ - VISIBLEBOX [multiset的使用]
阅读量:6672 次
发布时间:2019-06-25

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

tags:[STL][sort][贪心]

题解:
做法:先对数组a进行排序,再将数组a从头到尾扫一遍,使用multiset维护最小值,
如果,即将放入集合的数字>=最小值的两倍,那我们就删除掉多重集合的最小值。
最后,多重集合中元素的个数即为答案。

证明:“人生得意须尽欢,莫使金樽空对月”。当即将进入集合的箱子,装得下

最小的箱子时,若装入并非最小的箱子,或啥也不装,找不到更优解,喵!

#include 
#include
#include
#include
using namespace std;multiset
s;int T, n, a[100000 + 10];int main(){ cin >> T; for(int t=1;t<=T;t++) { s.clear(); scanf("%d", &n); for(int i=1;i<=n;i++) { scanf("%d", &a[i]); } sort(a+1, a+1+n); s.insert(a[1]); for(int i=2;i<=n;i++) { int minc = *s.begin(); if(a[i] >= 2*minc) { s.erase(s.begin()); } s.insert(a[i]); } printf("Case %d: %d\n", t, (int)s.size()); }}

  

转载于:https://www.cnblogs.com/RUSH-D-CAT/p/6390402.html

你可能感兴趣的文章
vim 文本编辑器
查看>>
使用angular做微信内html5开发时碰到的两个坑
查看>>
pvst+
查看>>
博为峰Java技术题 ——JavaEE Servlet 国际化Ⅰ
查看>>
linux学习笔记(一)
查看>>
【Spring Boot】13.整合druid
查看>>
Java并发和并行的区别
查看>>
extjs down 的用法
查看>>
layabox基础:hello world
查看>>
ClassUtil
查看>>
Elastic-Job定时任务
查看>>
真实分享记录我学习Linux系统遇到的问题
查看>>
Linux下查找占用内存最多的进程
查看>>
mongodb 配置文件
查看>>
查看 docker 容器使用的资源
查看>>
Jedis的配置和优化
查看>>
layui + 阿里巴巴iconfont图标库导入
查看>>
2017总结一
查看>>
MySQL中TIMESTAMPDIFF和TIMESTAMPADD函数的用法
查看>>
Power Designer数据库建模工具,正向、逆向工程
查看>>