「一本通 1.1 例 1」活动安排
Posted wyc06
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了「一本通 1.1 例 1」活动安排相关的知识,希望对你有一定的参考价值。
题目大意
给定n个左闭右开的区间,选出尽量多的区间使得这些区间两两不交,求最多能选多少个。
思路解析
按照区间右端点升序排序,依次枚举各个区间,若与上一个被选区间无交集,那么就将这个区间选中。
为什么要用右端点升序呢?因为这样子的话留给后面时间就多了。
程序注释
#include <iostream>
#include <algorithm>
using namespace std;
const int N=1e5+5;
int n,ans;
struct seg {
int st,fi;
}s[N];
bool cmp(seg a,seg b) {
return a.fi<b.fi; //右端点排序
}
int main() {
cin>>n;
for(int i=1;i<=n;i++)
cin>>s[i].st>>s[i].fi;
sort(s+1,s+n+1,cmp);
int las=-1; //las为上一个区间的右端点
for(int i=1;i<=n;i++) {
if(las<=s[i].st) { //如果不交
ans++;
las=s[i].fi; //更新选中的区间
}
}
cout<<ans;
return 0;
}
以上是关于「一本通 1.1 例 1」活动安排的主要内容,如果未能解决你的问题,请参考以下文章