Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public int assignBikesMethod3(int[][] workers, int[][] bikes) {
- int dpTable[][] = new int[workers.length][1 << bikes.length];
- for (int[] dpRow : dpTable) {
- Arrays.fill(dpRow, -1);
- }
- return assignBikesMethod3(workers, bikes, 0, new BitMask(0), dpTable);
- }
- public int assignBikesMethod3(int[][] workers, int[][] bikes, int worker, BitMask assignedBikes, int dp[][]) {
- if (worker == workers.length) return 0;
- if (dp[worker][assignedBikes.getMask()] != -1) {
- return dp[worker][assignedBikes.getMask()];
- }
- int ans = MAX_VALUE;
- for (int i = 0; i < bikes.length; i++) {
- if (!assignedBikes.checkSetBit(i)) {
- assignedBikes.setBit(i);
- int distance = manhattanDistance(workers[worker], bikes[i]);
- ans = min(ans, distance + assignBikesMethod3(workers, bikes, worker + 1, assignedBikes, dp));
- assignedBikes.flip(i);
- }
- }
- return dp[worker][assignedBikes.getMask()] = ans;
- }
- class BitMask {
- int val;
- public BitMask(int val) {
- this.val = val;
- }
- public void setBit(int bitIndex) {
- val |= 1 << bitIndex;
- }
- public void flip(int bitIndex) {
- val = val ^ (1 << bitIndex);
- }
- boolean checkSetBit(int bitIndex) {
- return (val & (1 << bitIndex)) >= 1;
- }
- public int getMask() {
- return val;
- }
- }
Add Comment
Please, Sign In to add comment