博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【bzoj 3433】{Usaco2014 Jan} Recording the Moolympics(算法效率--贪心)
阅读量:6231 次
发布时间:2019-06-21

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

题意:给出n个区间[a,b),有2个记录器,每个记录器中存放的区间不能重叠。求2个记录器中最多可放多少个区间。

解法:贪心。只有1个记录器的做法详见——。而对于2个,就是在1个的基础上(按 bi 排序,选第一个与之前没有相交的区间)维护2个值,注意要好好for循环遍历一次O(n),若想着用while直接跳过一些区间很容易出错!!!另外,遍历时要先考虑能否把当前的区间接在之前右端点较右的记录器。

1 #include
2 #include
3 #include
4 #include
5 #include
6 using namespace std; 7 8 const int N=155; 9 struct node{
int l,r;}a[N];10 11 int read()12 {13 char ch=getchar();14 int x=0;15 while (ch<'0'||ch>'9') ch=getchar();16 while (ch>='0'&&ch<='9') x=x*10+ch-'0', ch=getchar();17 return x;18 }19 bool cmp(node x,node y) {
return x.r
a[i].r) { int t;t=a[i].l,a[i].l=a[i].r,a[i].r=t;}27 }28 sort(a+1,a+1+n,cmp);29 int cnt=0,x=0,y=0;30 for (int i=1;i<=n;i++)31 {32 if (x<=a[i].l) cnt++,x=a[i].r;33 else if (y<=a[i].l) cnt++,y=a[i].r;34 if (x

 

转载于:https://www.cnblogs.com/konjak/p/6044643.html

你可能感兴趣的文章
列举数据挖掘领域的十大挑战性问题
查看>>
校园网解决方案分析
查看>>
Web Component 实战 读书笔记
查看>>
SpringMVC 参数注解
查看>>
源码构建lamp环境
查看>>
第四周作业
查看>>
/boot目录存储空间满导致apt-get安装软件失败
查看>>
LaTeX - 可伸缩箭头
查看>>
关于IT
查看>>
flask-SqlAlchemy QueuePool limit of size 5 overflow 10 reached
查看>>
显示salt进程具体名称
查看>>
HTTP GET方式提交与POST方式提交
查看>>
mysql5.7虚拟列初次尝试
查看>>
Exchange server2013 搭建步骤
查看>>
购物车
查看>>
Java基础学习总结(2)——接口
查看>>
MyBatis学习总结(三)——优化MyBatis配置文件中的配置
查看>>
配置Linux 免密码登陆
查看>>
安装php:configure: error: libpng.(a|so) not found解决办法
查看>>
公众号和微信个人号 加粉最全的方法
查看>>