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

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

매트리스 얼룩 지우기

시간 제한3초메모리 제한256 MB

요약
m행 n열 매트리스에 찍힌 얼룩 칸을 3x3 블록으로 모두 덮을 때 필요한 도구의 최소 개수를 구합니다.
난이도

보통10점 중 7점

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

문제

추석 연휴에 홍준이는 집에서 파티를 열었다. 어린 아이가 많이 왔고, 다음 날 홍준이는 침대 시트 밑 매트리스에 얼룩이 여러 개 스며든 것을 발견했다. 매트리스를 전부 세탁하는 비용이 너무 비싸서 홍준이는 작은 얼룩 제거 도구를 사려고 한다.

매트리스의 윗면은 mm행 nn열의 직사각형 격자다. 왼쪽 위 칸의 좌표는 (1,1)(1, 1)이고 오른쪽 아래 칸의 좌표는 (m,n)(m, n)이다. 좌표 (r,s)(r, s)는 위에서 rr번째 행, 왼쪽에서 ss번째 열에 있는 칸을 뜻한다. 얼룩 하나는 칸 하나를 덮는다.

얼룩 제거 도구는 매트리스 안에 완전히 들어가는 3×33 \times 3 칸 영역을 골라 그 영역의 얼룩을 한 번에 모두 지운다. 영역의 변은 매트리스의 변과 평행하다. 도구는 한 번 쓰면 버리는 소모품이라서 도구 하나가 처리하는 영역도 하나다. 매트리스의 크기와 얼룩의 위치가 주어질 때, 얼룩을 모두 지우는 데 필요한 도구의 최소 개수를 구하자.

크기가 6×116 \times 11인 매트리스에서 얼룩이 (4,3)(4, 3), (6,5)(6, 5), (3,6)(3, 6), (4,7)(4, 7)에 있으면 도구 두 개로 충분하다. 4행부터 6행, 3열부터 5열까지의 영역이 (4,3)(4, 3)과 (6,5)(6, 5)를 지우고, 2행부터 4행, 5열부터 7열까지의 영역이 (3,6)(3, 6)과 (4,7)(4, 7)을 지운다.

입력

첫 줄에 테스트케이스의 개수 TT가 주어진다. 이어서 TT개의 테스트케이스가 주어진다.

각 테스트케이스의 첫 줄에는 매트리스의 크기를 나타내는 두 자연수 mm과 nn이 주어진다. (3≤m≤103 \le m \le 10, 3≤n≤10003 \le n \le 1000) 둘째 줄에는 얼룩의 개수 cc가 주어진다. (0≤c≤mn0 \le c \le mn) 다음 cc개의 줄에는 얼룩 하나의 행 번호와 열 번호가 공백으로 구분되어 주어진다. 행 번호는 11 이상 mm 이하, 열 번호는 11 이상 nn 이하이고, 얼룩의 좌표는 모두 서로 다르다.

출력

각 테스트케이스마다 얼룩을 모두 지우는 데 필요한 도구의 최소 개수를 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    2
    6 11
    4
    4 3
    6 5 
    3 6
    4 7 
    7 7
    4 
    3 2
    5 6
    6 4
    7 6
    
    예상 출력
    2
    2
    
  2. 예제 2

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