문제
풀이
$dp[i][j]$를 $i$명의 학생을 $j$개의 그룹으로 나누는 경우의 수로 정의합시다. 그렇다면 아래 점화식을 통해 경우의 수를 구할 수 있습니다.
\[dp[i][j] = dp[i - 1][j] \times j + dp[i - 1][j - 1]\]총 $M$번에 걸쳐 분리 집합에서 학생들을 합쳐줍시다. 만약 합치기 전 두 학생이 다른 그룹에 속해있었다면 총 그룹의 개수는 $1$ 줄어듭니다.
그룹의 개수를 $c$라 하면 출력해야 하는 답은 $\sum dp[c][i]$이므로 미리 누적 합 전처리를 해두고 출력하면 됩니다.
코드
1 | |