Consider, we have been given 3-Dimensional boxes. Each box has width, depth and height (wi, di, hi).
Box stacking problem is to stack these boxes in such a way that we achieve maximum height.
There is one condition that is attached to it: A box can be placed on top of another only if both it’s base dimensions width and depth are less than a box on which it stacked on. There is no restriction on height, a tall box can be placed on a short box.
def tallestStack(boxes):
boxes.sort(key = lambda x: x[0])
heights = {box: box[2] for box in boxes}
for i in range(1, len(boxes)):
box = boxes[i]
S = [boxes[j] for j in range(i) if canBeStacked(boxes[j], box)]
heights[box] = box[2] + max([heights[box] for box in S], default = 0)
return max(heights.values(), default = 0)
def canBeStacked(top, bottom):
return top[0] < bottom[0] and top[1] < bottom[1]
boxes = [(1,5,4), (1,2,2), (2,3,2), (2,4,1), (3,6,2), (4,5,3)]
print(tallestStack(boxes))