아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

초콜릿 트리 만들기

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

요약
높이 H인 완전 이진 트리를 만들되, 내부 노드의 수 M이 자식 두 수의 합이 M 또는 N+M이 되도록 분할되고, 주어진 허용 집합에 없는 수의 초콜릿 개수를 최소로 한다.
난이도

보통10점 중 7점

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

문제

코코는 초콜릿을 가지고 트리 만들기 게임을 하려고 한다. 각각의 초콜릿에는 00 이상 N−1N-1 이하의 정수가 쓰여 있다. 트리 만들기 게임은 각 노드에 초콜릿이 하나씩 놓여 있는 이진 트리를 만드는 게임으로, 다음과 같이 진행된다.

  • 맨 처음에는 트리의 루트를 만들고, 아무 정수가 쓰여진 초콜릿을 하나 놓는다.

  • 그 이후에는 다음을 반복한다.

    • 리프 노드를 하나 선택한다. 그 자리의 초콜릿에 쓰인 수를 MM이라고 하자.
    • 선택한 노드 아래에 자식 노드 2개를 추가하고, 합이 MM 또는 N+MN+M인 두 수를 골라서 그 두 수가 쓰인 초콜릿을 두 자식 노드 자리에 놓는다.

코코는 수 a_1,a_2,⋯ ,a_ka\_1,a\_2,\cdots ,a\_k가 쓰여 있는 초콜릿은 무한히 많이 갖고 있지만, 다른 수가 쓰여 있는 초콜릿은 갖고 있지 않아 한별이에게 빌려야 한다. 모든 리프의 깊이가 HH인 트리를 만든다고 할 때, 한별이에게 최소 몇 개의 초콜릿을 빌려야 트리를 완성할 수 있는지 구해 보자. 어떤 노드의 깊이는 그 노드에서 루트까지의 최단경로 상에 있는 간선의 개수로 정의한다.

입력

첫 줄에는 NN, HH, kk의 값이 주어진다. (2≤N≤5002\le N\le 500, 1≤H≤601\le H\le 60, 1≤k≤N1\le k\le N)

다음 줄에는 a_1,a_2,⋯ ,a_ka\_1,a\_2,\cdots ,a\_k의 값이 주어진다. (0≤a_i\<N0\le a\_i\<N) a_ia\_i의 값은 서로 다르다.

출력

한별이에게 빌려야 하는 초콜릿의 개수의 최솟값을 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2 5 1
    1
    
    예상 출력
    21
    
  2. 예제 2

    입력
    3 5 2
    1 2
    
    예상 출력
    0