[总结] 三种常见的区间贪心问题

一、线段覆盖

n个开区间(ai,bi),选择尽量多个区间,使得这些区间两两不相交

右端点排序(<)兼顾左端点(>),再从左到右遇到不相交的就选

1 sort(he+1,he+n+1,cmp);
2 int tot=0,now=-1000;
3 for(int i=1; i<=n; i++) {
4   if(he[i].l>=now) now=he[i].r,tot++;
5 }
6 printf("%d", tot);

二、区间选点

n个闭区间[ai,bi],选择尽量少的点,使得每个区间至少有一个点

右端点排序(<)兼顾左端点(>),每次选择可选区间的最后一个点

1 sort(he+1,he+n+1,cmp);
2 int tot=0,now=-1;
3 for(int i=1; i<=n; i++) {
4    if(he[i].l>now) now=he[i].r,tot++;
5 }
6 printf("%d", tot);

三、区间覆盖

数轴上有n个闭区间[ai,bi],选择尽量少的区间覆盖一条指定的线段[s,t]

左端点排序(<)兼顾右端点(<),每次选择从当前起点能覆盖到的最长的区间

1 sort(he+1,he+n+1,cmp);
2 int tot=0,now=-1,to=-1;
3 for(int i=1; i<=n; i++) {
4   if(he[i].l<=now) to=max(to,he[i].r);
5   else now=to,to=max(he[i].r),tot++;
6 }
7 printf("%d", tot);
时间: 2024-12-16 20:33:31

[总结] 三种常见的区间贪心问题的相关文章

深入学习jQuery的三种常见动画效果

× 目录 [1]显隐效果 [2]高度变化 [3]淡入淡出 前面的话 动画效果是jQuery吸引人的地方.通过jQuery的动画方法,能够轻松地为网页添加视觉效果,给用户一种全新的体验.jQuery动画是一个大的系列,本文将详细介绍jQuery的三种常见动画效果——显隐效果.高度变化及淡入淡出 显隐 在CSS中,总结过实现元素显隐的9种思路.而jQuery中的show()和hide()方法是通过改变display属性来实现元素显隐效果,它们是jQuery中最基本的动画方法 [hide()] hid

HDU 2037 今年暑假不AC (区间贪心)

题意:又是中文题... 析:先说一下区间贪心的一个定理,选择不相交的区间:数轴上有n个开区间(ai, bi).选择尽量多的区间,使得这些区间两两不相交,贪心策略是,一定是选bi小的.(想一下为什么). 知道这个的话,这个问题还不so easy!先对每个节目结束的时间排序,然后一个一个的选,保证没有相交,也就是说当前的开始时间一定要是上一个后面或者上一个刚结束当前就开始就OK了. 代码如下: #include <iostream> #include <cstdio> #include

ASP.NET后台调用前台JS函数的三种常见方法

第一种:使用普通的添加控件中的Attributes属性进行调用 例如,像一般的普通的按钮:Button1.Attributes.Add("onclick","MyFun();"); 此方法只能在Onload中或者类似于onload的初始化过程中添加才有效.并且是先执行脚本函数,同时无法改变执行顺序. 第二种:使用Response.Write方法进行调用 例如,像我们经常会使用到的Response.Write("<scripttype='text/ja

Android应用开发中三种常见的图片压缩方法

Android应用开发中三种常见的图片压缩方法,分别是:质量压缩法.比例压缩法(根据路径获取图片并压缩)和比例压缩法(根据Bitmap图片压缩). 一.质量压缩法 private Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里

入网认证三种常见方式介绍

入网认证是一个用户接入一个网络后第一个接触的功能,尤其是在无线网络下,现在几乎找不到无需认证即可接入的网络了. 常见的入网认证技术主要有三种:802.1X.MAB.WebAuth,本文将简单介绍这几种技术的实现原理及应用场景. 802.1X 802.1x协议是基于Client/Server的访问控制和认证协议.它可以限制未经授权的用户/设备通过接入端口(access port)访问LAN/WLAN.在获得交换机或LAN提供的各种业务之前,802.1x对连接到交换机端口上的用户/设备进行认证.在认

hdu2037 (区间贪心问题)

今年暑假不AC Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submission(s) : 15   Accepted Submission(s) : 4 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description "今年暑假不AC?" "是的."

POJ 3190 Stall Reservations-奶牛分栏(区间贪心,优先队列)

http://poj.org/problem?id=3190 题目大意:每一只奶牛要求在时间区间[A,B]内独享一个牛栏.问最少需要多少个牛栏. 贪心策略是优先满足A最小的奶牛,维持一个牛栏B最小堆,将新来的奶牛塞进B最小的牛栏里. <p><span style="color: rgb(51, 51, 51); font-family: 'Microsoft Yahei', 'Helvetica Neue', Helvetica, Arial, sans-serif; line

poj2376 Cleaning Shifts 区间贪心

题目大意: (不说牛了) 给出n个区间,选出个数最少的区间来覆盖区间[1,t].n,t都是给出的. 题目中默认情况是[1,x],[x+1,t]也是可以的.也就是两个相邻的区间之间可以是小区间的右端与大区间的左端相差1.这个是看题解才知道的. 解题思路: 贪心题的关键是找到贪心策略.但是这题的贪心策略没那么明显.并且贪心策略没有特定地去选择某一区间.这一题最重要的是要知道在什么情况下才需要增加一个区间. 首先是进行排序,按照区间的左端从小到大排序,左端相同的按照右端从小到大排. 从头开始遍历(只能

nyoj814 又见拦截导弹 贪心

感觉是贪心...就用了贪心  结果ac了.. 和nyoj236完全一个类型的嘛... #include <stdio.h> #include <string.h> int main() { int a[3005],visit[3005],n; while(scanf("%d",&n)!=EOF) { if(n==-1) break; for(int i=0;i<n;i++) scanf("%d",&a[i]); mems