문제
풀이
총 $i$개의 빌딩을 왼쪽에서 봤을 때 $j$개, 오른쪽에서 봤을 때 $k$가 되도록 하는 빌딩의 배치의 수를 $DP[i][j][k]$라 합시다. 이때 빌딩은 높이가 $1$인 것부터 $i$인 것까지 있습니다.
이제 각 빌딩의 높이를 $1$씩 높여줍니다. 그러면 높이가 $2$인 것부터 $i + 1$인 것까지 있습니다. 여기에 높이가 $1$인 빌딩을 놓아주면 빌딩이 $i + 1$개일때의 경우도 계산할 수 있습니다.
점화식은 아래와 같습니다.
\[DP[i][j][k] = DP[i - 1][j - 1][k] + DP[i - 1][j][k - 1] + (i - 2)DP[i - 1][j][k]\]$DP[i - 1][j - 1][k]$는 맨 왼쪽에 높이가 $1$인 빌딩을 놓는 경우, $DP[i - 1][j][k - 1]$은 오른쪽에 놓는 경우, $(i - 2)DP[i - 1][j][k]$는 빌딩 사이에 놓는 경우입니다.
코드
1 | |