만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

낙서하는 마녀

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

요약
격자의 '?' 칸을 채워 검은 칸이 하나의 트리를 이루고 흰 칸끼리 인접하지 않도록 하면서, 검은 칸의 최대 개수를 구합니다.
난이도

어려움10점 중 8점

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

문제

낙서 마녀 ALBERTINE은 WW열 HH행의 정사각형 셀로 이루어진 직사각형 결계의 입구에 낙서를 하고 있다. 이 세계에서 낙서는 반드시 셀을 흰색 또는 검은색으로 칠해서 완성된다.

사역마 ANJA가 이미 낙서의 일부를 그렸다. 마녀는 나머지 셀을 모두 칠해 낙서를 완성하려 한다. 마녀에게는 다음과 같은 고집이 있다.

  • 두 개의 서로 다른 셀이 변을 공유하면 두 셀은 인접한다고 한다. 완성된 낙서에서 임의의 두 검은 셀에 대해, 한쪽에서 다른 쪽으로 인접한 검은 셀을 따라가는 경로가 정확히 하나만 존재해야 한다.
  • 서로 인접한 흰 셀은 없어야 한다.

마녀는 검은색을 좋아하므로, 고집을 지키면서 검은 셀이 가장 많은 낙서를 완성하고 싶어 한다. 고집을 만족하는 낙서에서 검은 셀의 최대 개수는 얼마인가.

입력

H W
c11c12…c1W
c21c22…c2W
…
cH1cH2…cHW

HH는 결계 입구의 세로 길이, WW는 가로 길이이다.

cijc_{ij}는 위에서 ii행, 왼쪽에서 jj열에 있는 셀의 상태이다. 검은색으로 칠해진 셀은 '#', 흰색으로 칠해진 셀은 '.', 아직 칠하지 않은 셀은 '?'이다.

출력

고집을 만족하면서 검은 셀의 개수가 가질 수 있는 최댓값을 한 줄에 출력한다.

어떻게 칠해도 고집을 만족할 수 없으면 -1을 출력한다.

제한

  • 1≤H≤111 \le H \le 11
  • 1≤W≤111 \le W \le 11
  • cijc_{ij}는 '#', '.', '?' 중 하나이다.

예제5

  1. 예제 1

    입력
    3 4
    .##.
    #??#
    .#?#
    
    예상 출력
    8
    
  2. 예제 2

    입력
    5 5
    ##?##
    #???#
    ?????
    #???#
    ##?##
    
    예상 출력
    19
    
  3. 예제 3

    입력
    9 2
    ##
    ..
    ??
    ??
    ??
    ??
    ??
    ??
    ??
    
    예상 출력
    -1
    
  4. 예제 4

    입력
    7 9
    ??#####??
    ?#?????#?
    ?#?????#?
    ?#??#??#?
    ?#???#?#?
    ??#####??
    ???????#?
    
    예상 출력
    44
    
  5. 예제 5

    입력
    11 11
    ???????????
    ???####????
    ???#???#???
    ???#???#???
    ???#???#???
    ???####????
    ???#???#???
    ???#???#???
    ???#???#???
    ???####????
    ???????????
    
    예상 출력
    86