区间贪心(区间不相交问题***)

区间不相交问题中,通过选取左端点最大的开区间以最大化不相交区间数量。当开区间I1被I2包含时,优先选择I1以留出更多空间容纳其他区间。将区间按左端点降序排列,能有效避免区间交集。
摘要由CSDN通过智能技术生成

区间不相交问题:

    给出N个开区间(x, y),从中选择尽可能多的开区间,使得这些开区间两两没有交集。例如对开区间(1,3)、(2,4)、(3,5)、(6,7)来说,可以选出最多三个区间(1,3)、(3,5)、(6,7)它们互相没有交集。

    首先考虑最简单的情况,如果开区间 I1被开区间 I2包含,如图a,那么显然选择 I1是最好的选择,因为如果选择I1,那么就有更大的空间去容纳其他开区间。

    接下来把所有开区间按左端点x从大到小排序,如果去除掉区间包含的情况,那么一定有y1>y2>...>yn成立,如图b。现在考虑应当如何选取区间。通过观察会发现,I1的右边有一段是一定不会和其他区间重叠的,如果把它去掉,那么I1的左边剩余部分就会被I2包含,应当选择I1。因此对这种情况,总是先选择左端点最大的区间。

#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;

const int maxn = 110;

struct Inteval{
	int x, y; 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值