Advertisement
mickypinata

GRD3-T03: Railroad

Nov 23rd, 2020
149
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.06 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long lli;
  5. typedef pair<int, int> pii;
  6.  
  7. const int N = 16;
  8.  
  9. int nRail;
  10. pii rail[N + 10];
  11. vector<vector<lli>> dp(N + 1, vector<lli>((1 << N) + 1, -1));
  12.  
  13. lli shortAddition(int st, int chosen){
  14.     if(chosen == 0){
  15.         return 0;
  16.     }
  17.     if(dp[st][chosen] != -1){
  18.         return dp[st][chosen];
  19.     }
  20.     lli mn = 1e18;
  21.     for(int i = 1; i <= nRail; ++i){
  22.         if((chosen & (1 << (i - 1))) != 0){
  23.             lli add = 0;
  24.             if(rail[st].second > rail[i].first){
  25.                 add = rail[st].second - rail[i].first;
  26.             }
  27.             mn = min(mn, add + shortAddition(i, chosen & (~(1 << (i - 1)))));
  28.         }
  29.     }
  30.     return dp[st][chosen] = mn;
  31. }
  32.  
  33. int main(){
  34.  
  35.     scanf("%d", &nRail);
  36.     for(int i = 1; i <= nRail; ++i){
  37.         scanf("%d %d", &rail[i].first, &rail[i].second);
  38.     }
  39.     lli mn = 1e18;
  40.     for(int i = 1; i <= nRail; ++i){
  41.         mn = min(mn, shortAddition(i, ((1 << nRail) - 1) & ~(1 << (i - 1))));
  42.     }
  43.     cout << mn;
  44.  
  45.     return 0;
  46. }
  47.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement