스무고개

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

요약
m개의 이진 특징으로 구분되는 n개의 물체 중 숨겨진 물체를 찾기 위해 최악의 경우 필요한 최소 질문 수를 구하는 문제입니다.
난이도

어려움10점 중 8점

유형
비트 연산, 동적 계획법, 완전 탐색
정답자
아직 제출이 없습니다

문제

방 안에 물건이 nn개 있고, 각 물건은 여러 개의 특징으로 설명된다. 하나의 특징은 "예" 또는 "아니오"로만 답할 수 있는 질문에 해당한다.

특징의 종류는 모두 mm개이며, 이 mm개의 특징만으로 방 안의 모든 물건을 구별할 수 있다. 즉, 각 물건은 길이가 mm인 이진(불리언) 수열로 표현되고, 서로 다른 두 물건은 적어도 하나의 특징에서 값이 다르다.

당신은 방 안의 어떤 물건 하나가 무엇인지 알아내려고 한다. 그래서 그 물건의 특징을 모두 알고 있는 사람에게 질문을 한다. 질문은 언제나 "이 물건은 jj번째 특징을 가지고 있습니까?"라는 형태이고, 대답은 "예" 또는 "아니오"이다. 당신은 이전 답을 들은 뒤에 다음 질문을 정할 수 있다.

질문을 한 번 할 때마다 100원을 내야 하므로, 당신은 질문 횟수(즉 내야 하는 돈)를 최대한 줄이려고 한다. 당신은 방 안에 있는 모든 물건의 특징을 알고 있지만, 알아내려는 물건이 그중 어떤 것인지는 모른다. 따라서 질문을 시작하기 전에 미리 전략(질문의 순서와, 답에 따라 어떻게 나눌지)을 세울 수 있다.

가장 좋은 전략을 사용한다고 할 때, 어떤 물건이든 반드시 구별해 내기 위해 최악의 경우에 필요한 질문 횟수의 최솟값을 구하는 프로그램을 작성하시오.

입력

입력은 여러 개의 테스트 케이스로 이루어진다.

각 테스트 케이스의 첫째 줄에는 특징의 개수 mm과 물건의 개수 nn이 주어진다 (0<m≤110 < m \le 11, 0<n≤1280 < n \le 128). 이어지는 nn개의 줄에는 각 물건의 특징이 주어진다. 각 물건의 특징은 길이가 mm인 이진 문자열로, 각 자리의 값은 1(예) 또는 0(아니오)이다. 서로 다른 두 물건의 특징이 완전히 같은 경우는 없다.

출력

각 테스트 케이스마다, 가장 좋은 전략을 사용했을 때 어떤 물건이든 구별하기 위해 최악의 경우에 필요한 질문 횟수의 최솟값을 한 줄에 출력한다.

예제1

  1. 예제 1

    입력
    8 1
    11010101
    11 4
    00111001100
    01001101011
    01010000011
    01100110001
    11 16
    01000101111
    01011000000
    01011111001
    01101101001
    01110010111
    01110100111
    10000001010
    10010001000
    10010110100
    10100010100
    10101010110
    10110100010
    11001010011
    11011001001
    11111000111
    11111011101
    11 12
    10000000000
    01000000000
    00100000000
    00010000000
    00001000000
    00000100000
    00000010000
    00000001000
    00000000100
    00000000010
    00000000001
    00000000000
    9 32
    001000000
    000100000
    000010000
    000001000
    000000100
    000000010
    000000001
    000000000
    011000000
    010100000
    010010000
    010001000
    010000100
    010000010
    010000001
    010000000
    101000000
    100100000
    100010000
    100001000
    100000100
    100000010
    100000001
    100000000
    111000000
    110100000
    110010000
    110001000
    110000100
    110000010
    110000001
    110000000
    0 0
    
    예상 출력
    0
    2
    4
    11
    9