Ż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].