• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zadanie z kombinatoryki (chyba) na ile różnych sposobów można wejść na wierzołek czworościanu foremnego[CodeForces]

0 głosów
249 wizyt
pytanie zadane 7 stycznia 2021 w Algorytmy przez wojtek_suchy Mądrala (6,880 p.)

Mam takie zdanie: https://codeforces.com/problemset/problem/166/E
I rozwiązanie do niego: https://codeforces.com/blog/entry/4173
Z rozwiązania rozumiem, że można być w 4 miejscach i miejsca ABC nie różnią się niczym. Nie rozumiem co oznaczają te nazwy zmiennych i dlaczego to działa

int zD = 1;
int zABC = 0;
for (int i = 1; i <= n; i++) {
    int nzD = zABC * 3LL % MOD;
    int nzABC = (zABC * 2LL + zD) % MOD;
    zD = nzD;
    zABC = nzABC;
}
cout << zD;

Czy ktoś mógłby pomóc mi zrozumieć dlaczego to działa, co się w tym kodzie dzieje i napisać nazwy zmiennych na czytelniejsze ?

1 odpowiedź

0 głosów
odpowiedź 7 stycznia 2021 przez Whistleroosh Maniak (57,400 p.)

Żeby rozjaśnić ten kod to na początku pokażę jak to można rozwiązać bardziej czytelnie. Powiedzmy, że dp[i][v] to ilosć sposobów na dojście do wierzchołka v wykonując i ruchów, wtedy otrzymujesz następujące przejścia między stanami:

dp[i][D] = dp[i-1][A] + dp[i-1][B] + dp[i-1][C]

dp[i][A] = dp[i-1][B] + dp[i-1][C] + dp[i-1][D]

dp[i][B] = dp[i-1][A] + dp[i-1][C] + dp[i-1][D]

dp[i][C] = dp[i-1][A] + dp[i-1][B] + dp[i-1][D]

Kod który podałeś korzysta z takiej zależności, że dp[i][A] = dp[i][B] = dp[i][C], więc możemy te stany traktować jako jeden. Wtedy zD to dp[i][D], zABC to dp[i][A]. 

Podobne pytania

+2 głosów
2 odpowiedzi 2,304 wizyt
0 głosów
1 odpowiedź 1,352 wizyt
0 głosów
2 odpowiedzi 331 wizyt
pytanie zadane 30 kwietnia 2020 w Matematyka, fizyka, logika przez damiang19 Nowicjusz (220 p.)

93,741 zapytań

142,677 odpowiedzi

323,296 komentarzy

63,326 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...