Manioc

festival

Sep 25th, 2018
323
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.48 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define MAX 1000007
  3. #define INF -1e9+7
  4.  
  5. using namespace std;
  6.  
  7. struct show{
  8.     int ini, fim;
  9.     int palco, shows;
  10.  
  11.     show(){}
  12.     show(int _ini, int _fim, int _shows, int _palco): ini(_ini), fim(_fim), shows(_shows), palco(_palco){}
  13. };
  14.  
  15. int dp[1 << 11][1007], n, palcos;
  16. show arr[MAX];
  17.  
  18. int bb(int num){
  19.     int l = 0, r = n;
  20.  
  21.     while(l < r){
  22.         int mid = (l+r)/2;
  23.  
  24.         if(arr[mid].ini >= num) r = mid;
  25.         else l = mid+1;
  26.     }
  27.  
  28.     return l;
  29. }
  30.  
  31. int solve(int idx, int shows, int mask){
  32.     int prox = bb(arr[idx].fim);
  33.     //cout << idx << " " << prox << endl;
  34.  
  35.     if(idx == n){
  36.         if(mask == (1 << palcos)-1) return shows;
  37.         return -1e9+7;
  38.     }
  39.  
  40.     if(dp[mask][idx] != -1) return dp[mask][idx];
  41.  
  42.     int ans = solve(prox, shows+arr[idx].shows, mask | arr[idx].palco);
  43.     ans = max(solve(idx+1, shows, mask), ans);
  44.  
  45.     return dp[mask][idx] = ans;
  46. }
  47.  
  48. bool compare(show a, show b){
  49.     return a.ini < b.ini;
  50. }
  51. int main(){
  52.     scanf("%d", &palcos);
  53.     n = 0;
  54.     for(int i = 0; i < palcos; i++){
  55.         int n_shows; scanf("%d", &n_shows);
  56.         for(int j = 0; j < n_shows; j++){
  57.             int l, r, q; scanf("%d %d %d", &l, &r, &q);
  58.             arr[n++] = show(l, r, q, 1 << i);
  59.         }
  60.     }
  61.     arr[n] = show(-INF, -INF, 0, 0);
  62.     sort(arr, arr+n, compare);
  63.     memset(dp, -1, sizeof dp);
  64.  
  65.     int resp = solve(0, 0 , 0);
  66.     printf("%d\n", resp == INF ? -1: resp);
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment