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

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

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

基本思路:

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

实现:

#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;
	
}

相关推荐

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

    2024-01-25 13:50:02       57 阅读
  2. 贪心算法c++

    2024-01-25 13:50:02       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 13:50:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 13:50:02       100 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 13:50:02       82 阅读
  4. Python语言-面向对象

    2024-01-25 13:50:02       91 阅读

热门阅读

  1. 【node】关于npm、yarn、npx的区别与使用

    2024-01-25 13:50:02       71 阅读
  2. c#模板设计模式

    2024-01-25 13:50:02       48 阅读
  3. 蓝桥杯题目-回文日期

    2024-01-25 13:50:02       67 阅读
  4. #Uniapp: uni.makePhoneCall(OBJECT) 拨打电话

    2024-01-25 13:50:02       58 阅读
  5. 5-分页实现

    2024-01-25 13:50:02       60 阅读
  6. vue2面试题:vue组件之间的通信方式有哪些?

    2024-01-25 13:50:02       47 阅读