주택 단지

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

요약
각 부지는 한 소유자의 건물만 철거할 수 있고 각 소유자는 한 부지에서만 철거될 수 있을 때 지을 수 있는 h×w 단지의 최대 개수를 구한다.
난이도

보통10점 중 7점

유형
이분 탐색, 그리디, 완전 탐색, 구현
정답자
아직 제출이 없습니다

문제

주택부는 여러 개의 주택 단지를 짓는 대규모 건설 사업을 계획하고 있다. 각 단지는 여러 채의 아파트로 이루어지며, 공무원에게 합리적인 가격으로 분양된다. 주택부는 이 사업에 쓸 수 있는 여러 개의 큰 부지를 확보했고, 각 부지에 단지를 하나씩 지으려고 한다. 모든 부지는 직사각형이며, 각 부지는 m×nm \times n 개의 1×11 \times 1 크기 정사각형 블록으로 나뉜다. 모든 주택 단지는 h×wh \times w 크기의 직사각형으로, 그 부지 안의 정확히 h×wh \times w 개의 블록을 덮는다.

문제는, 각 부지에 원래 낡은 건물들이 일부 있어서(각 건물은 부지의 블록 하나를 정확히 차지한다) 단지를 지을 빈 공간을 충분히 확보하기 어렵다는 점이다. 따라서 주택부는 이 건물들 중 일부를 사들여 철거하고 필요한 공간을 확보해야 한다. 이 낡은 건물들은 여러 명의 소유주에게 속해 있다.

주민들의 반발에 대응하여, 주택부는 다음과 같은 "공정한" 원칙을 발표했다. 어떤 부지에서 건물을 사들일 때에는 오직 한 소유주에게 속한 건물만 골라서 모두 합리적인 가격에 사들인다. 그리고 같은 소유주의 건물을 다른 부지에서는 절대 사들이지 않겠다고 약속한다. 이 제약 때문에 단지를 지을 수 없는 부지가 생길 수도 있다.

정리하면, 각 부지에서는 (매입이 필요하다면) 한 소유주의 건물만 철거할 수 있고, 한 소유주의 건물은 사업 전체를 통틀어 최대 한 부지에서만 매입할 수 있다. 이 조건을 지키면서 최대 몇 개의 주택 단지를 지을 수 있는지 구하는 프로그램을 작성하시오.

입력

첫 줄에 테스트 케이스의 수 tt (1≤t≤101 \le t \le 10)가 주어진다. 이어서 각 테스트 케이스의 데이터가 주어진다.

각 테스트 케이스의 첫 줄에는 다섯 개의 정수 kk, mm, nn, hh, ww가 주어진다. kk (1≤k≤301 \le k \le 30)는 부지의 개수, mm과 nn (1≤m,n≤501 \le m, n \le 50)은 각 부지의 행과 열의 수, hh와 ww (1≤h,w≤501 \le h, w \le 50)는 단지가 차지하는 행과 열의 수이다.

그 다음에는 k×mk \times m 개의 줄이 주어지며, kk 개의 부지를 각각 m×nm \times n 행렬로 나타낸다. 각 줄은 앞뒤 공백 없이 길이가 nn인 문자열이다. 각 문자는 부지의 한 블록을 나타내며, 대문자 알파벳 A부터 Z까지 중 하나이면 그 블록을 소유한 소유주를, 문자 0(숫자 영)이면 그 블록이 비어 있음을 뜻한다. 같은 알파벳은 어느 부지에서든 같은 소유주를 가리킨다.

출력

각 테스트 케이스마다 한 줄에, 그 테스트 케이스에서 지을 수 있는 주택 단지의 최대 개수를 출력한다.

예제3

  1. 예제 1

    입력
    2
    3 4 3 3 2
    A0B
    000
    0A0
    00B
    AA0
    00B
    0B0
    000
    A0A
    000
    B00
    B00
    3 4 3 3 2
    A0B
    000
    0A0
    00B
    AA0
    00B
    0B0
    000
    A0A
    000
    0B0
    B00
    
    예상 출력
    3
    2
    
  2. 예제 2

    입력
    1
    2 1 2 1 2
    A0
    0B
    
    예상 출력
    2
    
  3. 예제 3

    입력
    1
    4 1 2 1 2
    A0
    A0
    00
    0B
    
    예상 출력
    3