Onbegrensde knapsack en coin-change-DP
Items een willekeurig aantal keer gebruiken
Onbegrensde knapsack en coin-change-DP is een gratis Competitive Programming Academy-les op CoddyKit. Dit is les 3 van 4. Je kunt de volledige les hieronder gratis lezen en daarna in de browser praktisch oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Competitive Programming Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Competitive Programming Academy bevat in totaal 4 lessen.
Onbeperkte voorwerpen
In het onbeperkte knapzakprobleem kun je elk voorwerp zo vaak meenemen als je wilt. Denk aan munten in een automaat, niet aan een vaste stapel.
De ene kleine wijziging
Vergeleken met 0/1 verandert alleen de richting van de lus. Bij onbeperkte voorwerpen doorloop je de capaciteit vooruit, van laag naar hoog.
Vooruit hergebruiken is juist de bedoeling
Als je vooruitgaat, kan dp[w - coin] ditzelfde voorwerp al bevatten. Dat opzettelijke hergebruik maakt het precies mogelijk om het opnieuw mee te nemen.
Maak kennis met het muntwisselprobleem
Het klassieke muntwisselprobleem vraagt naar het kleinste aantal munten dat samen een bedrag vormt. Het is onbeperkte DP met een minimum in plaats van een maximum.
Definieer de toestand
Laat dp[a] het kleinste aantal munten zijn dat nodig is om bedrag a te maken. Begin met dp[0] = 0, want voor nul zijn geen munten nodig.
dp = [float("inf")] * (amount + 1)
dp[0] = 0Gebruik oneindig voor onmogelijke bedragen
Onbereikbare bedragen beginnen als oneindig. Als een bedrag aan het einde oneindig blijft, kan geen enkele combinatie van munten het vormen.
De overgang
Probeer voor elke munt elk bedrag dat je ermee kunt bereiken te verbeteren. Gebruik één munt meer dan het kleinere overgebleven bedrag.
for coin in coins:
for a in range(coin, amount + 1):
dp[a] = min(dp[a], dp[a - coin] + 1)Waarom de volgorde vooruit is
Door de bedragen oplopend te doorlopen, telt dp[a - coin] deze munt al mee. Zo kan één munt meerdere keren bijdragen.
Tel in plaats daarvan de manieren
Vervang min+1 door een som om het aantal manieren te tellen waarop je elk bedrag kunt maken. Met de muntlus buitenom voorkom je dat je volgordes dubbel telt.
for coin in coins:
for a in range(coin, amount + 1):
dp[a] += dp[a - coin]Lees het resultaat af
Je antwoord staat in dp[amount]. In de minimumvariant betekent een oneindige waarde dat het doelbedrag niet kan worden gevormd.
0/1 versus onbeperkt
Onthoud de ene omschakeling: een capaciteit die achteruit loopt betekent elk voorwerp één keer, vooruit betekent onbeperkt. Dezelfde tabel, tegengestelde doorlooprichting.
Snelle controle
Test waardoor het knapzakprobleem onbeperkt wordt.
Samenvatting
Je hebt de lus vooruit gedraaid voor onbeperkt hergebruik en muntwisselen opgebouwd met een minimum voor het kleinste aantal munten of een som voor het totale aantal manieren. 💰
Leer Python met een AI-tutor — gratis
Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.
- Cursussen
- 30
- Lessen
- 120
Veelgestelde vragen
Is de les “Onbegrensde knapsack en coin-change-DP” gratis?
Ja — de volledige tekst van “Onbegrensde knapsack en coin-change-DP” kun je hier gratis op het web lezen. Als je interactief wilt oefenen met een ingebouwde code-editor en een AI-begeleider die 24/7 beschikbaar is, en de rest van de cursus Competitive Programming Academy wilt ontgrendelen, kun je upgraden naar CoddyKit PRO. De cursus Competitive Programming Academy bevat in totaal 4 lessen.
Wat leer ik in “Onbegrensde knapsack en coin-change-DP”?
Items een willekeurig aantal keer gebruiken Je oefent met Competitive Programming Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.
Heb ik ervaring nodig om met Competitive Programming Academy te beginnen?
Ervaring vooraf is niet nodig. Competitive Programming Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 3 van 4.
Hoe lang duurt de les “Onbegrensde knapsack en coin-change-DP”?
De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.
Kan ik code schrijven en uitvoeren in deze les over Competitive Programming Academy?
Ja. Elke les over Competitive Programming Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.
Alle lessen in deze cursus
- 0/1 knapsack: nemen of laten
- Knapsack met geoptimaliseerd geheugengebruik
- Onbegrensde knapsack en coin-change-DP
- Subset sum en partition