타일 자르기

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

요약
W, I, N 글자로 채워진 격자에서 WIN을 이루는 일자형 또는 L자형 트라이오미노를 겹치지 않게 최대 몇 개 만들 수 있는지 구한다.
난이도

어려움10점 중 8점

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

문제

프로도, 샘, 메리, 피핀이 초록용 여관에서 에일을 마실 때, 다음 잔을 누가 살지 정하려고 양피지와 펜으로 간단한 놀이를 한다. 규칙은 다음과 같다.

각 칸에 문자 W, I, N 중 하나가 적힌 m×nm \times n 직사각형 타일(mm행 nn열)이 주어진다. 이 타일에서 아래 조건을 만족하는 트리오미노(변으로 이어진 세 칸으로 이루어진 조각)를 최대 몇 개까지 잘라낼 수 있는지 구하여라.

  • 조각의 양 끝 칸에는 W와 N이 하나씩 적혀 있어야 하고, 가운데 칸에는 I가 적혀 있어야 한다. 즉, 어떤 순서로 읽으면 WIN이 되어야 한다.
  • 여기서 가운데 칸이란 나머지 두 칸 모두와 변으로 맞닿아 있는 칸을 뜻한다.
  • 사용할 수 있는 조각 모양은 세 칸이 일직선으로 놓인 것과 ㄱ자(L자, 회전 포함) 두 가지뿐이다.

각 칸은 최대 하나의 조각에만 쓸 수 있다. 잘라낼 수 있는 조각의 최대 개수를 구하면 된다. 이 최댓값을 찾아낸 호빗이 이기고 누가 다음 잔을 살지 정한다.

참고: 샘과 피핀이 이 놀이에서 술값을 가장 자주 내는 편이라, 둘은 놀이를 바위·양피지·검(RPS)으로 바꾸자고 조르고 있다.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스는 문자 W, I, N만으로 이루어진 m×nm \times n 격자이다(1≤m,n≤301 \le m, n \le 30). 테스트 케이스 사이는 빈 줄로 구분되며, 입력은 파일의 끝(EOF)에서 종료된다.

출력

각 테스트 케이스마다 잘라낼 수 있는 조각의 최대 개수를 정수 하나로 한 줄에 출력한다.

예제2

  1. 예제 1

    입력
    WIIW
    NNNN
    IINN
    WWWI
    
    NINWN
    INIWI
    WWWIW
    NNNNN
    IWINN
    
    예상 출력
    5
    5
    
  2. 예제 2

    입력
    WIN
    
    예상 출력
    1