괄호 표현식

시간 제한1초메모리 제한128 MB

요약
주어진 길이와 정확한 최대 깊이를 갖는 올바른 괄호 표현식의 개수를 구하는 문제입니다.
난이도

보통10점 중 6점

유형
동적 계획법, 조합론, 수학
정답자
아직 제출이 없습니다

문제

집합 XX를 다음 규칙으로 정의되는 가장 작은 집합이라고 하자.

  • 빈 문자열은 XX에 속한다.
  • AA와 BB가 XX에 속하면 (A)(A)와 ABAB도 모두 XX에 속한다.

XX의 원소를 올바른 괄호 표현식이라고 부른다. 예를 들어 다음 문자열들은 올바른 괄호 표현식이다.

()(())()
(()(()))

반면 다음 문자열들은 올바른 괄호 표현식이 아니다.

(()))(()
())(()

올바른 괄호 표현식 EE에 대해, EE의 길이는 EE에 들어 있는 괄호 문자의 개수이다. EE의 깊이 D(E)D(E)는 다음과 같이 정의된다.

D(E)={0E가 빈 문자열인 경우D(A)+1E=(A), A∈X인 경우max⁡(D(A),D(B))E=AB, A,B∈X인 경우D(E) = \begin{cases} 0 & E\text{가 빈 문자열인 경우} \\ D(A) + 1 & E = (A),\ A \in X \text{인 경우} \\ \max(D(A), D(B)) & E = AB,\ A, B \in X \text{인 경우} \end{cases}

두 양의 정수 nn과 dd가 주어질 때, 길이가 정확히 nn이고 깊이가 정확히 dd인 올바른 괄호 표현식의 개수를 구하여라.

입력

한 줄에 두 정수 nn과 dd가 공백 하나로 구분되어 주어진다. 2≤n≤382 \le n \le 38, 1≤d≤191 \le d \le 19이다.

출력

길이가 nn이고 깊이가 dd인 올바른 괄호 표현식의 개수를 정수 하나로 출력한다.

힌트

길이가 66이고 깊이가 22인 올바른 괄호 표현식은 정확히 세 개 있다.

(())()
()(())
(()())

예제4

  1. 예제 1

    입력
    6 2
    
    예상 출력
    3
    
  2. 예제 2

    입력
    2 1
    
    예상 출력
    1
    
  3. 예제 3

    입력
    4 2
    
    예상 출력
    1
    
  4. 예제 4

    입력
    6 1
    
    예상 출력
    1