(贪心)区间问题大致思路

1.选择不相交区间。

a.描述:

数轴上有n个开区间(ai, bi)。选择尽量多个区间,使得这些区间两两 没有公共点。

b.思路总结:

1.区间x完全包含y,选y
2.按照bi从小到大排序,从第一个区间开始选
3.把所有和上一个区间相交的区间排除在外

c.思路分析:

首先明确一个问题:假设有两个区间x,y,区间x完全包含y。那么,选x是不划算的,因 为x和y最多只能选一个,选x还不如选y,这样不仅区间数目不会减少,而且给其他区间留出 了更多的位置。接下来,按照bi从小到大的顺序给区间排序
贪心策略是:一定要选第一个 区间。

现在区间已经排序成b1≤b2≤b3…了,考虑a1和a2的大小关系。

情况1:a1>a2,如图所示,
这里写图片描述
区间2包含区间1。前面已经讨论过,这种情况下一 定不会选择区间2。不仅区间2如此,以后所有区间中只要有一个i满足a1>ai,i都不要选。在 今后的讨论中,将不考虑这些区间。
情况2:排除了情况1,一定有a1≤a2≤a3≤…,如图所示。
这里写图片描述

如果区间2和区间1完全 不相交,那么没有影响(因此一定要选区间1),否则区间1和区间2最多只能选一个。如果 不选区间2,区间1的1部分其实是没有任何影响的(它不会挡住任何一个区间),区间1的有效部 分其实变成了2部分,它被区间2所包含!由刚才的结论,区间2是不能选的。依此类推, 不能因为选任何区间而放弃区间1,因此选择区间1是明智的。
选择了区间1以后,需要把所有和区间1相交的区间排除在外,需要记录上一个被选择的 区间编号。这样,在排序后只需要扫描一次即可完成贪心过程,得到正确结果。

2.区间选点问题。

a.描述:

数轴上有n个闭区间[ai, bi]。取尽量少的点,使得每个区间内都至少有 一个点(不同区间内含的点可以是同一个)。

b.思路总结:

1.按b从小到大排序(b相同时a从大到小排序)
2.区间包含的情况 下,大区间不需要考虑。
3.取最后一个点

c.思路分析:

如果区间i内已经有一个点被取到,则称此区间已经被满足。受上一题的启发,下面先 讨论区间包含的情况。由于小区间被满足时大区间一定也被满足,所以在区间包含的情况 下,大区间不需要考虑。
把所有区间按b从小到大排序(b相同时a从大到小排序),则如果出现区间包含的情 况,小区间一定排在前面。第一个区间应该取哪一个点呢?此处的贪心策略是:取最后一个 点
这里写图片描述
根据刚才的讨论,所有需要考虑的区间的a也是递增的,可以把它画成图8-8的形式。如 果第一个区间不取最后一个,而是取中间的,如a点,那么把它移动到最后一个点b后,被 满足的区间增加了,而且原先被满足的区间现在一定被满足。不难看出,这样的贪心策略是 正确的。

3.区间覆盖问题。

a.描述:

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

b.思路总结:

1.每个区间在[s, t] 外的部分都应该预先被切掉
2.按照a从小到大排序,选择起点在s的最长区间[ai,bi]
3.新的起点应 该设置为bi,忽略所有区间在bi之前的部分

c.思路分析:

本题的突破口仍然是区间包含和排序扫描,不过先要进行一次预处理每个区间在[s, t] 外的部分都应该预先被切掉,因为它们的存在是毫无意义的。预处理后,在相互包含的情况 下,小区间显然不应该考虑
把各区间按照a从小到大排序。如果区间1的起点不是s,无解(因为其他区间的起点更 大,不可能覆盖到s点),否则选择起点在s的最长区间。选择此区间[ai, bi] 后,新的起点应 该设置为bi,并且忽略所有区间在bi之前的部分,就像预处理一样。虽然贪心策略比上题复 杂,但是仍然只需要一次扫描
这里写图片描述
s为当前有效起点(此前部分已被覆盖),则 应该选择区间2。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/560765.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32的DHT11

DHT11基础 DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传 感器。它应用专用的数字模块采集技术和温湿度传感技术,确保产品具有极高 的可靠性与卓越的长期稳定性。传感器包括一个电阻式感湿元件和一个NTC测 温元件,并与一个高性能…

Java智能卡 技术_java智能卡APDU学习笔记

因项目需要,利用APDU通信协议在ME手机端和卡端进行通讯。在实践的过程中遇到一些问题,先记录如下。APDU协议,即是智能卡与读写器间的应用层协议,在ISO7816-4[7]中定义了该协议的结构格式。APDU数据有两种结构,读写器使…

(二叉树存储+递归遍历)Binary Tree Traversals

题目: A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjoint binary trees called the left and right subtrees. There are three most important ways in which the vertices of a binary tree can be sys…

(二叉树创建+查找)精灵邮差

题目 精灵是非常奇特的生物。众所周知,他们可以活很长时间,他们神奇的能力不是一件容易接受的事情。此外,他们住在树上。但是,你可能不知道有些事情。虽然通过魔法传送提供东西非常方便(很像电子邮件)。他…

(找规律)Magic of David Copperfield

题目: 每一个参与的观众被要求将手指放在左上方的图片上(即编号为1的图片),魔术师开始了:魔术师告诉观众在图片上移动k次(移动是把手指放到上下左右相邻的图片上,如果那儿有图片的话&#xff0…

(DAG+固定终点的最长路和最短路)硬币问题

##题目: 有n种硬币,面值分别为v1, v2, …, vn,每种都有无限多。给定非负整数S,可以选用多少个硬币,使得面值之和恰好为S?输出硬币数目的最小值和最大值。 Input 第一行两个整数,n,S…

java虚拟机堆栈工作原理_java虚拟机工作原理?

展开全部从宏观上介绍一下Java虚拟机的e5a48de588b662616964757a686964616f31333363373731工作原理。从最初编写的Java源文件(.java文件)是如何一步步执行的,如下图所示,首先Java源文件经过前端编译器(javac或ECJ)将.java文件编译为Java字节码文件&#…

(BFS)Catch That Cow(poj3278)

题目&#xff1a; 农夫知道一头牛的位置&#xff0c;想要抓住它。农夫和牛都于数轴上 &#xff0c;农夫起始位于点 N(0<N<100000) &#xff0c;牛位于点 K(0<K<100000) 。农夫有两种移动方式&#xff1a; 1、从 X移动到 X-1或X1 &#xff0c;每次移动花费一分钟 2…

java jmx 监控_只用五分钟为系统实现基于JMX的监控

早期是作为J2EE的一部分, 因此总给人一种开发起来会很"重"的感觉, 这让不少Java程序员宁愿选择自行实现"轻量级"方案. 时至今日, 借助一些优秀的开源项目, JMX 也可以用起来很"轻".pojo-mbean 使用Annotation对MBean进行声明, 省去不少 JMX规范中…

wsld2java axis_Weblogic+axis2安装

Weblogicaxis2安装实验环境系统版本使用到软件软件版本Redhat 6.3Ld-linux.so.2Ld-linux.so.2 安装的weblogic的需要安装(系统自带)Weblogic10.3Axis21.41在以下实验中我使用的是1.41的war包 &#xff0c;下载war包的话可以在weblogic中进行部署。实验步骤&#xff1a;启动webl…

java流读写_java流概述以及文件读写示例

1. 先分清楚是字节流还是字符流。字节流&#xff1a;InputStream OutputStream字符流&#xff1a;Reader Writer字符流与字节流的区别是读取的单位长度不同&#xff0c;字节流读8字节&#xff0c;字符流读16字节&#xff0c;所以有中文时&#xff0c;就得用字符流。2. 在字节/字…

python自动化操作应用程序错误_web自动化中踩过的低级错误坑(python+selenium)

1.定位了元素没有做下一步操作&#xff0c;比如&#xff0c;点击、输入等功能&#xff0c;而报错&#xff0c;报错信息如下&#xff1a;2.上传图片时&#xff0c;定位元素&#xff0c;应该定位input标签&#xff0c;点击页面input标签肉眼没有看到定位到任何元素&#xff0c;以…

qgis折点打断_arcgis在折点处打断并建立网络分析(最短路径等问题)

目的&#xff1a;GIS网络分析用于对段路径等问题。这里仅仅讲述如何建立网络分析。网络建立前必须满足以下条件1.要素文件在节点处打断(本文下面会叙述)2.要素文件在地理数据库里的数据集里(一般是这样)3.要素文件包含的数据集里已经验证拓扑&#xff0c;并确保没有错误(可选)注…

base64 java php_利用PHP将图片转换成base64编码的实现方法

先来说一下为什么我们要对图片base64编码base64是当前网络上最为常见的传输8Bit字节代码的编码方式其中之一。base64主要不是加密&#xff0c;它主要的用途是把某些二进制数转成普通字符用于网络传输。由于这些二进制字符在传输协议中属于控制字符&#xff0c;不能直接传送&…

(BFS)Knight Moves(hdu1372)

题目&#xff1a; 在象棋王国&#xff0c;尼古拉斯.火山是一匹英俊的马&#xff0c;他非常幸运迎娶了白马王国的公主&#xff0c;他们将度蜜月&#xff0c;你现在是他们的女仆&#xff0c;火山会问你去一些地方最少需要多少步&#xff0c;这么简单的事当然难不倒你。由于火山是…

java上机作业要注意什么_Java第八次上机作业

1、请按照以下要求设计一个学生类Student&#xff0c;并进行测试。要求如下&#xff1a;1)Student类中包含姓名、成绩两个属性2)分别给这两个属性定义两个方法&#xff0c;一个方法用于设置值&#xff0c;另一个方法用于获取值.3)Student类中定义一个无参的构造方法和一个接收两…

java windows 2008_Windows server 2008 R2 安装Java环境

一、配置环境操作系统软件包Windows server 2008 R2jdk_1.7.rar二、安装操作1.右击解压jdk_1.7.rar&#xff1b;解压后双击运行jdk-7u79-windows-i586 .exe2.点击【下一步】一直到有个【更改】按钮&#xff0c;可以更改安装路径&#xff0c;设置完成后点击“下一步”。到达这个…

java 匿名类型_Java之匿名类讲解

匿名类&#xff0c;正如名字一样在java中没有名字标识的类&#xff0c;当然了编译后还是会安排一个名字的。下面是一个关于匿名类的简单例子&#xff1a;public classClient {public static voidmain(String[] args) throws InterruptedException {Thread tnew Thread(newRunna…

(并查集)小希的迷宫

题目&#xff1a; 上次Gardon的迷宫城堡小希玩了很久&#xff08;见Problem B&#xff09;&#xff0c;现在她也想设计一个迷宫让Gardon来走。但是她设计迷宫的思路不一样&#xff0c;首先她认为所有的通道都应该是双向连通的&#xff0c;就是说如果有一个通道连通了房间A和B&…

(并查集)食物链

题目&#xff1a; 动物王国中有三类动物A,B,C&#xff0c;这三类动物的食物链构成了有趣的环形。A吃B&#xff0c; B吃C&#xff0c;C吃A。 现有N个动物&#xff0c;以1&#xff0d;N编号。每个动物都是A,B,C中的一种&#xff0c;但是我们并不知道它到底是哪一种。 有人用两…