Logo
(追記) (追記ここまで)

20054번 - 트리 가짓수 세기

시간 제한메모리 제한제출정답맞힌 사람정답 비율
2 초 256 MB2711257143.030%

문제

이진 검색 트리(BST, Binary Search Tree)는 모든 노드가 최대 2ドル$개의 자식 노드를 가지고 있는 트리이다. 만약 어떤 노드에 쓰여 있는 수가 $X$라면, 그 노드의 왼쪽 서브트리에는 $X$보다 작은 수, 오른쪽 서브트리에는 $X$보다 큰 수만 저장되어 있어야 한다.

다음은 BST의 삽입하는 함수를 수도-코드(pseudo code)로 작성한 것이다.

insert(number X, node N)
 if X가 노드 N에 있는 수보다 작다면
 if N의 왼쪽 자식이 없다면
 X를 포함하는 새 노드를 만든 뒤, N의 왼쪽 자식으로 만든다
 else
 insert(X, N의 왼쪽 자식)
 else (X가 노드 N에 있는 수보다 크다면)
 if N의 오른쪽 자식이 없다면
 X를 포함하는 새 노드를 만든 뒤, N의 오른쪽 자식으로 만든다
 else
 insert(X, N의 오른쪽 자식)

첫 번째로 삽입하는 수를 루트로 놓고, 그 뒤로 삽입하는 모든 수 X에 대해서 insert(X, root)를 호출하게 된다.

트리의 높이는 루트 노드로부터 리프 노드까지의 경로 중 가장 긴 경로 위에 존재하는 노드의 개수를 뜻한다. (리프 노드는 자식 노드가 없는 것을 의미한다.)

1ドル$부터 $N$까지의 수를 BST에 삽입하려고 한다. 삽입 순서를 자유롭게 정할 수 있을 때 만들어지는 높이가 $K$ 이하인 BST의 가짓수를 구해보자. (BST의 루트 노드는 높이가 1로 가정한다.)

2ドル$ 1ドル$ 3ドル$ 순으로 넣었을 때 생성되는 BST와 2ドル$ 3ドル$ 1ドル$ 순으로 넣었을 때 생성되는 BST는 같은 경우이고, 3ドル$ 2ドル$ 1ドル$ 4ドル$와 2ドル$ 1ドル$ 3ドル$ 4ドル$ 순으로 넣었을 때 생성되는 BST는 서로 다른 경우이다.

구하려는 경우의 수는 매우 커질 수 있으므로 답을 10ドル^9+7$로 나눈 나머지를 출력한다.

입력

첫 번째 줄에 두 정수 $N,ドル $K$이 공백으로 구분되어 주어진다. (1ドル \leq N \leq 3500,,円 1 \leq K \leq 12$)

출력

만들어지는 BST의 경우의 수를 10ドル^9+7$로 나눈 나머지를 출력한다.

제한

예제 입력 1

1 1

예제 출력 1

1

예제 입력 2

4 2

예제 출력 2

0

예제 입력 3

5 3

예제 출력 3

6

힌트

출처

Camp > 숭고한 연합 Algorithm Camp > 2020 숭고한 연합 Algorithm Camp > Marathon G번

(追記) (追記ここまで)

출처

대학교 대회

  • 사업자 등록 번호: 541-88-00682
  • 대표자명: 최백준
  • 주소: 서울시 서초구 서초대로74길 29 서초파라곤 412호
  • 전화번호: 02-521-0487 (이메일로 연락 주세요)
  • 이메일: contacts@startlink.io
  • 통신판매신고번호: 제 2017-서울서초-2193 호

AltStyle によって変換されたページ (->オリジナル) /