Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

Een bezorg-firma moet al hun pakjes bij de klanten krijgen. In hun magazijn liggen er \(n\) pakjes met elk een gegeven volume. Om kosten te besparen zouden ze graag zo weinig mogelijk vrachtwagens gebruiken om alle pakjes te vervoeren. Gelukkig hebben alle vrachtwagens dezelfde capaciteit. Ze zetten hun beste planners aan het werk om uit te zoeken hoe ze het best de pakjes verdelen over de vrachtwagens. De firma zit echter wel op een strikt schema aangezien de pakjes diezelfde dag nog geleverd moeten worden, dus ze willen een zo goed mogelijke planning, geen perfecte.

We zoeken een gretig algoritme voor dit inpakprobleem die voor een gegeven lijst pakjes een benadering geeft van het kleinste aantal vrachtwagens dat gebruikt kan worden om alle pakjes te vervoeren. Een vrachtwagen wordt voorgesteld door de klasse Truck. Deze heeft een bepaalde capaciteit en kan gevuld worden met pakjes. Implementeer de interface TruckLoader in een klasse MyTruckLoader. Schrijf hiervoor de methode public List<Truck> pack(List<Integer> packages, int capacity) die voor een lijst van pakjes en een maximale capaciteit van een vrachtwagen berekent welke pakjes in welke vrachtwagens moeten. De output moet dus een lijst zijn van vrachtwagens die gevuld zijn met alle pakjes.

De planners zijn gelukkig vroeg gestart en hebben tijd om meerdere plannen op te stellen. Probeer het niet te houden bij één heuristiek, probeer er meerdere en combineer ze om tot een zo goed mogelijke oplossing te komen.

Opmerking:

Pas de inputlijst van de methode pack niet aan. Indien je dit wel doet, zullen de testen falen.

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