Guest User

Campus Bike II | TOP DOWN DP

a guest
Oct 12th, 2019
166
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 1.39 KB | None | 0 0
  1. public int assignBikesMethod3(int[][] workers, int[][] bikes) {
  2.     int dpTable[][] = new int[workers.length][1 << bikes.length];
  3.     for (int[] dpRow : dpTable) {
  4.         Arrays.fill(dpRow, -1);
  5.     }
  6.     return assignBikesMethod3(workers, bikes, 0, new BitMask(0), dpTable);
  7. }
  8.  
  9. public int assignBikesMethod3(int[][] workers, int[][] bikes, int worker, BitMask assignedBikes, int dp[][]) {
  10.     if (worker == workers.length) return 0;
  11.     if (dp[worker][assignedBikes.getMask()] != -1) {
  12.         return dp[worker][assignedBikes.getMask()];
  13.     }
  14.     int ans = MAX_VALUE;
  15.     for (int i = 0; i < bikes.length; i++) {
  16.         if (!assignedBikes.checkSetBit(i)) {
  17.             assignedBikes.setBit(i);
  18.             int distance = manhattanDistance(workers[worker], bikes[i]);
  19.             ans = min(ans, distance + assignBikesMethod3(workers, bikes, worker + 1, assignedBikes, dp));
  20.             assignedBikes.flip(i);
  21.         }
  22.     }
  23.     return dp[worker][assignedBikes.getMask()] = ans;
  24. }
  25. class BitMask {
  26.     int val;
  27.  
  28.     public BitMask(int val) {
  29.         this.val = val;
  30.     }
  31.  
  32.     public void setBit(int bitIndex) {
  33.         val |= 1 << bitIndex;
  34.     }
  35.  
  36.     public void flip(int bitIndex) {
  37.         val = val ^ (1 << bitIndex);
  38.     }
  39.  
  40.     boolean checkSetBit(int bitIndex) {
  41.         return (val & (1 << bitIndex)) >= 1;
  42.     }
  43.  
  44.     public int getMask() {
  45.         return val;
  46.     }
  47. }
Add Comment
Please, Sign In to add comment