给定一些区间,求最大可二重区间集。\(n \leq 150\)

Solution

贪心,将区间按照右端点排序,依次处理,若可以放入则必定放入,并且尽可能放在当前结束时间最晚的那一组

#include <bits/stdc++.h>
using namespace std;

const int N = 205;

struct range {
    int l,r;
    bool operator < (const range &b) {
        return r < b.r;
    }
} a[N];

int n,p1,p2,ans;

signed main() {
    ios::sync_with_stdio(false);
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i].l>>a[i].r;
    sort(a+1,a+n+1);
    for(int i=1;i<=n;i++) {
        if(a[i].l>=p1 && a[i].l>=p2) {
            if(p1>p2) p1=a[i].r;
            else p2=a[i].r;
            ++ans;
        }
        else {
            if(a[i].l>=p1) p1=a[i].r, ++ans;
            if(a[i].l>=p2) p2=a[i].r, ++ans;
        }
    }
    cout<<ans;
}

相关文章:

  • 2022-12-23
  • 2021-09-30
  • 2022-02-12
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-12-24
  • 2021-11-17
猜你喜欢
  • 2021-12-14
  • 2022-01-15
  • 2021-08-22
  • 2022-03-08
  • 2021-12-31
  • 2021-06-30
  • 2022-12-23
相关资源
相似解决方案