Drop links or images here to add them to the editor.

Je hebt \(n\) dozen \(d_0, \dotsc, d_{k−1}\). Doos \(d\) heeft (in cm) hoogte \(h_i\) en grondvlak \(l_i \times b_i\). Je kan doos \(d_i\) op doos \(d_j\) plaatsen als de dimensies van het grondvlak allebei strikt kleiner zijn, waarbij je \(l\) en \(b\) natuurlijk kan verwisselen door de doos te draaien. Je kan dus een doos met \(l = 4\), \(b = 7\) op een doos met \(l = 8\), \(b = 5\) plaatsen, maar niet op een doos met \(l = 7\), \(b = 7\). De bedoeling is nu te berekenen hoe hoog de hoogste toren is die je met deze dozen kan bouwen. Geef een algoritme met dynamisch programmeren, maar dat betekent niet dat je niet misschien eerst de volgorde van de dozen mag wijzigen… Je mag er (indien nodig) ook vanuit gaan dat de dimensies van de dozen kleine getallen zijn.

Implementeer de interface BoxStacker in een klasse genaamd DynamicBoxStacker. Schrijf een methode public int stack(Collection<Box> boxes) die de hoogte berekent van de grootste stapel die je kan bouwen met de gegeven dozen, zoals beschreven in de record Box.

Gebruik de testklasse SimpleTest om je oplossing lokaal te testen. Je kan hierin eenvoudig extra testgevallen toevoegen.