Middle — Senior
Kaip pakeisti sprendimą skaičiuojant sumas ir kombinacijas, jei kauliukų skaičius yra parametras?
sobes.tech AI
Atsakymas iš AI
Jei žaidimo kauliukų skaičius tampa parametru, sprendimas skaičiuojant sumas ir kombinacijas turi būti dinamiškas ir mastelio keičiamas.
Požiūriai:
-
Rekursinis perėjimas:
- Kiekvienam kauliukui peržiūrėkite visas galimas reikšmes (1–6).
- Rekursyviai sudėkite reikšmes ir suskaičiuokite kombinacijų skaičių kiekvienai sumai.
-
Dinaminis programavimas:
- Naudokite masyvą arba žodyną, kur indeksas yra suma, o reikšmė – būdų skaičius pasiekti tą sumą.
- Pradiniu atveju, 0 kauliukų, būdų pasiekti sumą 0 skaičius yra 1.
- Kiekvienam kauliukui atnaujinkite masyvą pridėdami būdų skaičių naujoms sumoms.
Pavyzdys Go kalba su dinaminio programavimo:
func diceSums(numDice int) map[int]int {
dp := make(map[int]int)
dp[0] = 1
for i := 0; i < numDice; i++ {
next := make(map[int]int)
for sum, count := range dp {
for face := 1; face <= 6; face++ {
next[sum+face] += count
}
}
dp = next
}
return dp
}
// Naudojimas:
// sums := diceSums(3)
// fmt.Println(sums) // Parodys kiekvienos sumos kombinacijų skaičių su 3 kauliukais
Šis požiūris leidžia efektyviai apskaičiuoti kombinacijų skaičių bet kokiam kauliukų skaičiui be rankinio visų variantų perėjimo.