C++区间覆盖(贪心算法)

假设有n个区间,分别是:l1,r1, l2,r2, l3,r3.....ln,rn

从这n个区间中选出某些区间,要求这些区间满足两两不相交,最多能选出多少个区间呢?

基本思路:

按照右端点从小到大排序,再比较左端点与前面覆盖的区域。每次选择左端点与前面的已经覆盖的区间不重合而右端点又尽量小的区间,这样可以让剩下的未覆盖的区间尽可能的大,就可以放置更多的区间。

实现:

cpp 复制代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 1001;
struct range{
	int left;
	int right;
}a[maxn];

bool comp(range a, range b){
	if(a.right != b.right){
		return a.right < b.right;
	}
	return a.left < b.left;
}
int main(){
	
	int n;
	cout << "n=";
	cin >> n;
	for(int i=0;i<n;i++){
		cout << "输入第" << i+1 << "个数\n";
		cout << "x = ";
		cin >> a[i].left;
		cout << "y = ";
		cin >> a[i].right;		
	}

	int count=1;
	sort(a,a+n,comp);
	int start = a[0].right;
	cout <<"("<<a[0].left<<","<<a[0].right<<")"<<endl;
	for(int i=1;i<n;i++){
		if(a[i].left>=start){
			count++;
			start = a[i].right;
			cout <<"("<<a[i].left<<","<<a[i].right<<")"<<endl;
		}
	}
	cout << count << endl;
	
}
相关推荐
2601_962218618 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
anew___9 小时前
蜂鸣器播放音乐——让 Arduino 唱出旋律
c++·stm32·单片机·嵌入式硬件·c
吞下星星的少年·-·9 小时前
The 2026 ICPC Asia East Continent Online Contest (II)(构造)
数据结构·算法
stolentime10 小时前
洛谷P10515 转圈题解
c++·算法·数学建模·贪心算法
tdtsmt11 小时前
穿戴硬件量产工艺实录:天地通电子智能手表主板 SMT 贴片案
c++
和裕11 小时前
蜂窝板 vs 七层瓦楞重型纸箱:大件工业设备运输性能与成本全对比
大数据·运维·网络·人工智能·算法
衡石科技11 小时前
Data_Agent记忆机制与经验复用衡石分析智能体会话记忆与长期学习技术解析
人工智能·科技·学习·算法·企业级bi
Msshu12312 小时前
2~5串锂电快充优选|XSP36 Type‑C升压/升降压快充管理芯片
数据结构·随机森林·贪心算法·排序算法·线性回归·启发式算法
shirsl13 小时前
算法 Day 2 滑动窗口 + 栈 / 单调栈
开发语言·python·算法