区间贪心

本文探讨如何使用贪心策略解决区间选择问题,确保开区间两两不交集。通过按区间左端点从大到小排序,选择覆盖最多区间的策略。同时介绍类似问题:确定最少点数覆盖所有闭区间。代码示例展示了具体实现方法。
摘要由CSDN通过智能技术生成

给定N个开区间(x, y),从中选择尽可能多的开区间,使得这些开区间两两没有交集。
比如(1, 3)、(2, 4)、(3, 5)、(6, 7),可以选择最多三个区间(1, 3)、(3, 5)、(6, 7),它们互相没有交集。
贪心策略:考虑最简单情况,如果开区间I1被开区间I2包含,那么此时最好的选择是I1,因为选更短的就能有更大的空间取容纳其他空间。

I1		          	      x1 ------------- y1
I2	    	  	   x2 ------------- y2
I3      	x3 ------------- y3
I4   x4 ------------- y4

把所有开区间按端点x从大到小排序,如果去除掉区间包含的情况,那么一定有y1 > y2 > … > yn,如图所示I1的右边有一段一定不会和其他区间重叠,如果把它去掉,那么I1的左半边就会被I2包含。这种情况就应该选择I1。换句话说,总应该选择左端点最大的区间

#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 110;
struct Inteval
{
   
	int x, y;
}I[maxn];
bool cmp(Inteval a, Inteval b)
{
   
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值