$Poj2376\ Poj3171\ Luogu4644\ Cleaning\ Shifts$ 数据结构优化$DP$
$Description$
$Sol$
就是区间覆盖问题$qwq!$
1.$DP$做!
$F[i]$表示覆盖$[1,i]$所需要的最小牛个数
把牛的工作时间按照右端点(结束时间)r[i]从小到大排序,按顺序扫描这些牛.设当前为第$i$头牛,则:
$F[r[i]]=(min_{l_i-1<=j<r_i}^{ }F[j])+1$
$F[0]=0$,其余初始化为+∞
算法导练: 带修改的区间最值问题$???$线段树$!!!$
2.贪心做!
比$DP$好写多了,$DP$还要写线段树...
首先是排序,把所有的区间按照右端点从小到大排序,按顺序扫描这些区间.
简单来说把答案区间依次存在队列中,如果当前区间可以替代队尾区间就删掉队尾,重复循环($while$),然后在把当前区间加入区间
那么怎样的叫可以替代呢,就是当前区间的左端点小于或者等于队尾的前一个区间的右端点加$1$就合法,这样保证了每个点都被覆盖到,满足上述条件,且当前区间比队尾区间的右端点更大(或等),所以当前区间一定更优.
细节:在从左到右扫描区间的过程中,若队尾区间的右端点已经$>=T$,那么一定要跳出循环,否则答案可能偏大
$Code$
- #include<bits/stdc++.h>
- #define il inline
- #define Rg register
- #define go(i,a,b) for(Rg int i=a;i<=b;i++)
- #define yes(i,a,b) for(Rg int i=a;i>=b;i--)
- using namespace std;
- il int read()
- {
- int x=,y=;char c=getchar();
- while(c<''||c>''){if(c=='-')y=-;c=getchar();}
- while(c>=''&&c<=''){x=(x<<)+(x<<)+c-'';c=getchar();}
- return x*y;
- }
- int n,t,p,minl=1e9,maxr;
- struct node{int l,r,k;}a[],as[];
- il bool cmp(node x,node y){if(x.r==y.r)return x.l<y.l;return x.r<y.r;}
- int main()
- {
- n=read(),t=read();
- go(i,,n){a[i]=(node){read(),read()};minl=min(minl,a[i].l),maxr=max(maxr,a[i].r);}
- if(minl> || maxr<t){printf("-1\n");return ;}
- sort(a+,a+n+,cmp);
- bool fl=;
- go(i,,n)
- {
- if(as[p].r>=t)break;
- while(p && as[p].k>=a[i].l)p--;
- if(a[i].l<=as[p].r+){as[++p]=a[i];as[p].k=as[p-].r+;}
- }
- if(as[p].r>=t)printf("%d\n",p);
- else printf("-1");
- return ;
- }
贪心 code
随机推荐
- 【Flask源码分析——请求上下文与应用上下文】
Flask中有两种上下文,请求上下文和应用上下文.两者的作用域都处于一个请求的局部中. 查看源代码,上下文类在flask.ctx模块中定义 AppContext类定义应用上下文,app是当前应用Web ...
- java+内存分配及变量存储位置的区别
Java内存分配与管理是Java的核心技术之一,之前我们曾介绍过Java的内存管理与内存泄露以及Java垃圾回收方面的知识,今天我们再次深入Java核心,详细介绍一下Java在内存分配方面的知识.一般 ...
- 怎样打开.jar格式文件,怎样运行.jar格式文件
当时第一次看到.jar文件不知道是什么鬼,以为是压缩包,直接就解压了,但是并没有什么用.所以在下为大家详细介绍如何打开.jar文件以及如何运行.jar文件.什么是.jar文件,简单的说就是java压缩 ...
- 【原生JS】滑动门效果
效果图: 思路:通过每次鼠标移动至目标上使所有图片重置为初始样式再向左移动目标及其左侧每个图片隐藏部分距离即实现. HTML: <!DOCTYPE html> <html> & ...
- java throw和catch同时使用
当异常出现在当前方法中,程序只对异常进行部分处理,还有一些处理需要在方法的调用者中才能处理完成,此时还应该再次抛出异常,这样就可以让方法的调用者也能捕获到异常; Eg: public static ...
- 再一次利用with as 优化SQL
上海的一个哥们问我有个SQL跑了4个小时都没跑完,实在受不了了,找我优化一下.我确实挺佩服他的,要是我遇到跑了几分钟的,就受不了了. SQL语句和执行计划如下: --sql id:1qbbw3th4x ...
- java 反射的概念
反射的引入: Object obj = new Student(); 若程序运行时接收到外部传入的一个对象,该对象的编译类型是Object,但程序又需要调用该对象运行类型的方法: 1.若编译和运行类型 ...
- 51nod1370 排列与操作
性质:最终值域相同的一定是连续一段 花费最小?一定是值域个数个!并且当最后为i的数恰好只有i一个位置的时候,肯定选择不动,少花费一个 所以,我们考虑:每个最终方案在花费最小的方案下恰好被统计一次! 而 ...
- Wannafly挑战赛15 C“出队”(约瑟夫环类问题)
传送门 •参考资料 [1]:浅梦无痕 [2]:Esquecer [3]:My CSDN •题意 n 个人围成一圈,1,2 报数,报 1 的离队,求编号为 x 的第几次出队: •对博文[1]的理解 第一 ...
- Roslyn 使用 WriteLinesToFile 解决参数过长无法传入
在写 Roslyn 的时候,经常需要辅助编译的工具,而这些工具需要传入一些参数,在项目很大的时候,会发现自己传入的参数比微软限制控制台可以传入的参数大很多,这时就无法传入了参数 本文告诉大家如何使用 ...