Ankit_132

D

Jun 12th, 2023
389
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.41 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define ll     long long
  6. #define _test   int _TEST; cin>>_TEST; while(_TEST--)
  7. #define ff     first
  8. #define ss     second
  9. #define pb     push_back
  10. #define ppb    pop_back
  11.  
  12. int main()
  13. {
  14.     ios_base::sync_with_stdio(false);
  15.     cin.tie(NULL);
  16.     cout.tie(NULL);
  17.  
  18.     _test
  19.     {
  20.         int n;
  21.         cin>>n;
  22.  
  23.         vector<pair<int, int>> seg(n);
  24.         for(auto &[a, b]: seg)
  25.             cin>>a>>b;
  26.  
  27.         sort(seg.begin(), seg.end());
  28.  
  29.         vector<vector<int>> dp(n, vector<int> (2, -1));
  30.  
  31.         function<int (int, int)> solve = [&](int i, int sel)
  32.         {
  33.             if(i == n)                  return 0;
  34.             if(dp[i][sel] != -1)        return dp[i][sel];
  35.  
  36.             if(!sel)
  37.                 return dp[i][sel] = max(solve(i+1, 1), solve(i+1, 0));
  38.  
  39.             if(sel)
  40.             {
  41.                 int val = 0;
  42.                 for(int j=i+1, k; j<n; j++)
  43.                 {
  44.                     if(seg[i].ss >= seg[j].ff)
  45.                     {
  46.                         k = j+1;
  47.                         while(k<n && seg[k].ff<=max(seg[i].ss, seg[j].ss))      k++;
  48.  
  49.                         val = max(val, 2 + max(solve(k, 1), solve(k, 0)));
  50.                     }
  51.                 }
  52.  
  53.                 return dp[i][sel] = val;
  54.             }
  55.         };
  56.  
  57.         cout<<n - max(solve(0, 0), solve(0, 1))<<"\n";
  58.     }
  59. }
Advertisement
Add Comment
Please, Sign In to add comment