Een buis van lengte \(l\) mm moet in kleine stukken gesneden worden. Jammer genoeg zijn niet alle lengten nuttig, maar het is wel bekend welke lengtes \(l_1, \dotsc, l_k\) nuttig zijn. De lengtes \(l_i\) zijn kleiner dan \(l\), maar zij – en \(l\) – zijn allemaal gehele getallen. Natuurlijk eist ook elke doorsnede een beetje ruimte – dat is dus een deel van de buis dat verloren gaat. De vraag is of er een opdeling in stukken van nuttige lengte bestaat zodat de hele buis wordt gebruikt (stel dat elke doorsnede 1 mm breed is). Hierbij bedoelt opdeling dat elke snede twee nuttige stukken van elkaar scheidt – een snede op het einde van de buis geldt dus niet.
Ontwerp een recursief algoritme voor dit probleem. Implementeer hiervoor de interface BuisOpdeling
1 in een klasse genaamd BuisOpdelingRecursief
.
Schrijf je een methode public boolean recursief(int l, Collection<Integer> lengtes)
die true
teruggeeft als er een opdeling bestaat, en false
als er geen opdeling bestaat.
Gebruik eventueel de testklasse SimpleTest
2 om je oplossing lokaal te testen. Je kan hierin eenvoudig extra testgevallen toevoegen.