提交时间:2022-07-19 12:20:48

运行 ID: 52489

#include<bits/stdc++.h> using namespace std; struct node{ int l, r; }; node a[405]; int n, ans, max_r; bool cmp(node a, node b){ int flga = a.r - a.l + 1; int flgb = b.r - b.l + 1; if(flga == flgb){ return a.l < b.l; } return flga > flgb; } void DFS(int layer, int L, int R, int cnt){ for(int i = layer + 1; i <= n; i++){ if(L <= a[i].l && a[i].r <= R){ if(ans >= cnt + (n - i + 1)){ break; } DFS(i, a[i].l, a[i].r, cnt + 1); } } ans = max(ans, cnt); return; } int main(){ cin >> n; for(int i = 1; i<= n; i++){ cin >> a[i].l >> a[i].r; max_r = max(a[i].r, max_r); } sort(a + 1, a + n + 1, cmp); DFS(0, 0, max_r, 0); cout << ans << endl; return 0; }