Obegränsad ryggsäck och myntväxlings-DP
Använd objekt hur många gånger som helst
Obegränsad ryggsäck och myntväxlings-DP är en gratis lektion i Förberedelse inför kodningsintervjuer på CoddyKit. Detta är lektion 3 av 4. Ni kan läsa hela lektionen gratis nedan och sedan öva praktiskt i webbläsaren med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt. Den ingår i lärvägen för Förberedelse inför kodningsintervjuer, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.
Obegränsat antal föremål
I det obegränsade ryggsäcksproblemet kan varje föremål tas med hur många gånger som helst. Tänk på mynt i en automat, inte på en fast hög.
Den enda lilla förändringen
Jämfört med 0/1 är det bara loopriktningen som ändras. För obegränsade föremål itererar du kapaciteten framåt, från låg till hög.
Återanvändning framåt är poängen
När du går framåt kan dp[w - coin] redan innehålla samma föremål. Den avsiktliga återanvändningen är precis det som gör att du kan ta det igen.
Introduktion till Coin Change
Det klassiska problemet coin change frågar efter det minsta antalet mynt som summerar till ett belopp. Det är obegränsad DP med ett minimum i stället för ett maximum.
Definiera tillståndet
Låt dp[a] vara det minsta antalet mynt som behövs för att bilda belopp a. Börja med dp[0] = 0, eftersom noll kräver inga mynt.
dp = [float("inf")] * (amount + 1)
dp[0] = 0Använd oändlighet för omöjliga belopp
Belopp som inte kan nås initieras som oändlighet. Om ett belopp fortfarande är oändligt i slutet kan ingen kombination av mynt bilda det.
Övergången
För varje mynt försöker du förbättra alla belopp som det kan nå. Använd ett mynt mer än det mindre kvarvarande beloppets bästa värde.
for coin in coins:
for a in range(coin, amount + 1):
dp[a] = min(dp[a], dp[a - coin] + 1)Varför framåtordning
Genom att svepa beloppen uppåt kan dp[a - coin] redan räkna med det här myntet. Det är så ett enda mynt kan bidra flera gånger.
Räkna antalet sätt i stället
Byt ut min+1 mot en summa för att räkna antalet sätt att bilda varje belopp. En yttre myntloop undviker att räkna ordningar två gånger.
for coin in coins:
for a in range(coin, amount + 1):
dp[a] += dp[a - coin]Läs av resultatet
Ditt svar finns i dp[amount]. I minimumvarianten betyder ett oändligt värde att målet inte kan bildas.
0/1 kontra obegränsat
Kom ihåg den enda skillnaden: bakåtriktad kapacitet betyder att varje föremål används en gång, framåtriktad betyder obegränsad användning. Samma tabell, motsatt genomgång.
Snabb kontroll
Testa vad som gör ryggsäcksproblemet obegränsat.
Sammanfattning
Du ändrade loopen till framåt för obegränsad återanvändning och byggde coin change med min för minsta antalet mynt eller summa för det totala antalet sätt. 💰
Lär dig Förberedelse inför kodningsintervjuer med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 90
- Lektioner
- 360
Vanliga frågor
Är lektionen ”Obegränsad ryggsäck och myntväxlings-DP” gratis?
Ja – hela texten till ”Obegränsad ryggsäck och myntväxlings-DP” kan läsas gratis här på webben. Om Ni vill öva interaktivt med en inbyggd kodredigerare och en AI-handledare som är tillgänglig dygnet runt och låsa upp resten av kursen i Förberedelse inför kodningsintervjuer, kan Ni uppgradera till CoddyKit PRO. Kursen i Förberedelse inför kodningsintervjuer innehåller totalt 4 lektioner.
Vad lär jag mig i ”Obegränsad ryggsäck och myntväxlings-DP”?
Använd objekt hur många gånger som helst Ni övar på Förberedelse inför kodningsintervjuer med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Förberedelse inför kodningsintervjuer?
Du behöver inga förkunskaper. Utbildningen i Förberedelse inför kodningsintervjuer på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 3 av 4.
Hur lång tid tar lektionen ”Obegränsad ryggsäck och myntväxlings-DP”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Förberedelse inför kodningsintervjuer-lektionen?
Ja. Varje Förberedelse inför kodningsintervjuer-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- 0/1-ryggsäck: ta eller lämna
- Rymdoptimerad ryggsäck
- Obegränsad ryggsäck och myntväxlings-DP
- Delmängdssumma och partitionering