活动选择

[ybt 1323](http://ybt.ssoier.cn:8088/problem_show.php?pid=1323)

浅显易懂经典的不重叠集合问题

每次找到最小的右边界,那么其他左边界小于选出右边界的集合已经重合

如果找到左边界大于等于此时右边界的集合,那么这是一个新的独立不重叠的集合,计数器更新,并更新选出右边界

注意计数器初始值应为1

代码如下

```cpp
#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int N=1009;
int n;
struct Q{int begin,end;}f[N];
bool cmp(Q a,Q b){return a.end<b.end;}
int main(){
    cin>>n;
    for(int i=1;i<=n;i++)
        cin>>f[i].begin>>f[i].end;
    sort(f+1,f+n+1,cmp);
    int m=f[1].end,ans=1;
    for(int i=2;i<=n;i++){
        if(f[i].begin>=m)m=f[i].end,ans++;
    }
    cout<<ans;
    return 0;
}
```
posted @ 2023-12-17 09:08  gHoTi  阅读(18)  评论(0)    收藏  举报