# Box Stacking Problem in C++

The box stacking problem is also well-known as the dynamic programming challenge. It asks the users to determine the highest stack of boxes that may be stacked on top of one another. The only way a box can be stacked atop another is if its base area is smaller, and even then, only when the box is rotated.

1. Formulation of the problem: Given a collection of boxes and their dimensions (length, breadth, and height), the objective is to determine the highest height that can be achieved by stacking the boxes while adhering to the restrictions.
2. Generating rotations: It is necessary to create every conceivable rotation for each box to handle the rotation of the boxes. As a result, we can think about various box orientations when stacking. The three possible rotations for each box allow for a variety of stacking configurations.
3. Methodology based on dynamic programming: This method is used to determine the highest height that can be reached. The problem can be resolved using the dynamic programming methodology by establishing a state that symbolizes the highest height that can be achieved while taking the current box at the top into consideration. When examining the boxes below a given box, we keep track of the highest height that may be achieved for each one. The current box is compared to all the boxes below it during the dynamic programming state change, and the maximum height is then updated appropriately.
4. Implementation of the algorithm: The procedure is often implemented using a combination of data structures, such as vectors or arrays, to record the box dimensions and dynamic programming arrays, which maintain track of the highest height that may be achieved. The method cycles over the boxes and determines the highest point that can be reached while taking the limits placed on it by the issue.
5. Output and analysis: After the algorithm has processed all the boxes, it provides the highest height that can be attained by stacking the boxes. The Box Stacking Problem's resolution for the specified set of boxes is represented by this output.
6. Sorting based on base area: After all rotations have been created, the boxes are arranged in a non-increasing manner according to their base areas. This method of sorting makes sure that a smaller base area box can only be stacked on top of a larger base area box.

### Code:

Let's take an example to illustrate the box stacking problem in C++:

Output:

```Input List elements are
4 7 6
1 3 2
4 6 5
10 32 12
Sorted List elements are
10 32 12
12 32 10
32 10 12
4 7 6
4 6 5
6 7 4
7 4 6
5 6 4
6 4 5
1 3 2
2 3 1
3 1 2
Max height is 60
Output list elements are
{3,2,1}
{1,2,3}
{6,5,4}
{4,5,6}
{4,6,7}
{32,12,10}
{10,12,32}
```

Using shared pointers and unique classes to solve the Box Stacking Problem. It includes a Box_Stacking class that manages the box stacking process and a dim_ension struct that represents box dimensions. The method uses dynamic programming to determine the highest box stacking height possible after sorting the boxes according to their base area. The output list of boxes that contribute to the maximum height is also prepared. The main method produces the maximum height along with a list of the boxes that contribute to it and uses a series of sample boxes to show how to use the Box_Stacking class.

Next TopicC++ flat_map