2018. 7. 27. 21:51, 알고리즘/BOJ
https://www.acmicpc.net/problem/15902
일단 경우의 수는 나중에 생각하고, 최소의 연산이 몇 회일지 고민을 해봅시다. 문제의 그림에서 위에는 작대기가 그어져있는데 아래에는 그어져있지 않거나, 반대로 위에는 작대기가 안그어져있는데 아래에는 그어져있으면 추가적인 연산이 필요함을 알 수 있습니다. 이를 통해 최소 연산의 횟수는 구할 수 있는데, 그 다음에 방법이 몇 가지인가가 문제입니다. 잘 생각해보면 작대기가 딱 맞아떨어지는 지점들로 경우의 수가 분리될 수 있고, 각 분리된 곳에서 작대기의 갯수를 N개라고 하면, 형태는 반드시
1 2 2 2 2
2 2 2 2 1
or
1 2 2 2 1
2 2 2 2
임을 알 수 있습니다.
이 때 먼저 Split이 이루어져야 Merge가 가능하므로 각 Split 지점들을 제일 먼저 처리하고 나면 결론적으로 $D_i = \sigma_{0 <= j < i-1} D_jD_{i-1-j}(i-1)!/j!(i-1-j)!$이 됩니다. 이 병렬적인 chunk들에 대해 다시 한 번 중복순열의 경우의 수를 곱해주면 됩니다.
'알고리즘 > BOJ' 카테고리의 다른 글
[BOJ] 10256번: Mutation (0) | 2018.07.28 |
---|---|
[BOJ] 9537번: Magical GCD (2) | 2018.07.28 |
[BOJ] 1605번: 반복 부분문자열 (0) | 2018.07.27 |
[BOJ] 15903번: 카드 합체 놀이 (0) | 2018.07.27 |
[BOJ] 15894번: 수학은 체육과목 입니다 (0) | 2018.07.27 |
[BOJ] 11505번: 구간 곱 구하기 (0) | 2018.07.27 |
Comments