首页 > 代码库 > 最大不重叠区间
最大不重叠区间
http://zju.acmclub.com/index.php?
app=problem_title&id=1&problem_id=1126
RT,给定n个区间。每一个区间有開始时间si和结束时间ei,
问在数轴上怎样摆放能使在没有重叠区间的情况下区间数目达到最大?
分析:典型的贪心思路。在《算法导论》贪心那一章的第一个样例即是它——活动选择问题
解法:按区间的结束时间从小到大排序后。从小的区间按顺序选取;
(1)假设当前区间与已经覆盖的位置重叠(与当前最右位置进行比較)。则舍弃;
(2)否则将此区间摆放在数轴上并更新当前已经覆盖的最右位置
cpp代码:
#include<iostream> using namespace std; int main(){ struct SEGMENT{ int x; int y; }; int n,si,ei,pos,k,tmp,i,cur; struct SEGMENT seg[101]; while(cin>>n){ pos = 0; if(n==0)break; while(n--){ cin>>si>>ei; seg[pos].x=si; seg[pos].y=ei; pos++; } //BubbleSort for(k=1;k<pos;k++){ for(i=0;i<pos-k;i++){ if(seg[i].y>seg[i+1].y){ //swap tmp=seg[i+1].y; seg[i+1].y=seg[i].y; seg[i].y=tmp; tmp=seg[i+1].x; seg[i+1].x=seg[i].x; seg[i].x=tmp; } } } //main process cur=seg[0].y; int cnt=1; for(k=1;k<pos;k++){ if(seg[k].x>=cur){ cur=seg[k].y; cnt++; } } cout<<cnt<<endl; } return 0; }
最大不重叠区间
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。