区间贪心

本文介绍了一种基于贪心算法思想的区间选择算法实现方法,通过合理排序及筛选无交集的区间,达到最大化区间数量的目的。

给出n个开区间(x,y,从中尽可能的选择可能多的开区间,使得这些开区间两两没有交集例如开区间(1,3),(2,4),(3,5),(6,7).,可以最多选出3个区间,(1,3),(3,5),(6,7).

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn = 1100;
struct interv{
	int x,y;
} I[maxn];
bool cmp(interv a ,interv b){
	if(a.x!=b.x) return a.y<b.y;
	return a.x > b.x;
}
int main(){
	int x,y,n;
	cin>>n;
	for(int i=0; i<n;i++){
		scanf("%d %d",&I[i].x,&I[i].y);
	}
	sort(I,I+n,cmp);
	int ans=1, lasty=I[0].y;
	for(int i=1;i<n;i++){
	    if(I[i].x >= lasty){
	    	lasty= I[i].y;
	    	ans++;
		}	
	}
	
	cout<<ans;
	
	
	return 0;
} 

结构体,先按x排,然后按y排,下一个x要>=上一个的y ,按x,y较小的排,可以使区间小,从而是区间个数变多,
贪心是用来解决一类最优化问题,并希望局部最优策略来推得全局最优的算法思想

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值