Box Stacking Java
- Get link
- X
- Other Apps
PROGRAM TO SOLVE STACKING PROBLEM
import java.util.*;public class GFG { /* Representation of a box */ static class Box implements Comparable<Box>{ // h --> height, w --> width, // d --> depth int h, w, d, area; // for simplicity of solution, // always keep w <= d /*Constructor to initialise object*/ public Box(int h, int w, int d) { this.h = h; this.w = w; this.d = d; } /*To sort the box array on the basis of area in decreasing order of area */ @Override public int compareTo(Box o) { return o.area-this.area; } } /* Returns the height of the tallest stack that can be formed with give type of boxes */ static int maxStackHeight( Box arr[], int n){ Box[] rot = new Box[n*3]; /* New Array of boxes is created - considering all 3 possible rotations, with width always greater than equal to width */ for(int i = 0;i < n;i++){ Box box = arr[i]; /* Original Box*/ rot[3*i] = new Box(box.h, Math.max(box.w,box.d), Math.min(box.w,box.d)); /* First rotation of box*/ rot[3*i + 1] = new Box(box.w, Math.max(box.h,box.d), Math.min(box.h,box.d)); /* Second rotation of box*/ rot[3*i + 2] = new Box(box.d, Math.max(box.w,box.h), Math.min(box.w,box.h)); } /* Calculating base area of each of the boxes.*/ for(int i = 0; i < rot.length; i++) rot[i].area = rot[i].w * rot[i].d; /* Sorting the Boxes on the bases of Area in non Increasing order.*/ Arrays.sort(rot); int count = 3 * n; /* Initialize msh values for all indexes msh[i] --> Maximum possible Stack Height with box i on top */ int[]msh = new int[count]; for (int i = 0; i < count; i++ ) msh[i] = rot[i].h; /* Computing optimized msh[] values in bottom up manner */ for(int i = 0; i < count; i++){ msh[i] = 0; Box box = rot[i]; int val = 0; for(int j = 0; j < i; j++){ Box prevBox = rot[j]; if(box.w < prevBox.w && box.d < prevBox.d){ val = Math.max(val, msh[j]); } } msh[i] = val + box.h; } int max = -1; /* Pick maximum of all msh values */ for(int i = 0; i < count; i++){ max = Math.max(max, msh[i]); } return max; } /* Driver program to test above function */ public static void main(String[] args) { Box[] arr = new Box[4]; arr[0] = new Box(4, 6, 7); arr[1] = new Box(1, 2, 3); arr[2] = new Box(4, 5, 6); arr[3] = new Box(10, 12, 32); System.out.println("The maximum possible "+ "height of stack is " + maxStackHeight(arr,4)); }}
OUTPUT:
The maximum possible height of stack is 60
- Get link
- X
- Other Apps
Comments
Post a Comment