만드는 중입니다

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

타일 놓기

면접 대비

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

요약
막힌 칸이 있는 격자에서 빈 칸을 모두 1 x k 가로 또는 세로 타일로 덮되, 타일마다 k를 자유롭게 정할 수 있을 때 필요한 타일 수의 최솟값을 구한다.
난이도

보통10점 중 7점

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

문제

영선이는 방 바닥에 타일을 놓으려고 한다. 바닥은 직사각형이며 1×11 \times 1 크기의 정사각형 칸으로 나누어져 있다. 타일의 크기는 1×k1 \times k이고, kk는 양의 정수이다. 타일은 바닥의 변과 평행하게 놓아야 하며, 타일의 변은 칸의 경계와 일치해야 한다. 타일끼리 겹쳐서 놓을 수는 없다.

방에는 1×11 \times 1 크기의 기둥이 몇 개 있고, 기둥이 있는 칸에는 타일을 놓을 수 없다.

바닥에 빈 칸이 남지 않도록 타일을 놓을 때 필요한 타일의 최소 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 방의 세로 크기 NN과 가로 크기 MM이 주어진다. (1≤N,M≤101 \le N, M \le 10)

둘째 줄부터 NN개의 줄에 방 바닥의 모양이 한 줄에 MM개의 문자로 주어진다. .은 빈 칸이고, #은 기둥이 있는 칸이다.

출력

첫째 줄에 방 바닥을 모두 채우는 데 필요한 타일의 최소 개수를 출력한다.

예제4

  1. 예제 1

    입력
    5 5
    .....
    .....
    .....
    .....
    .....
    
    예상 출력
    5
    
  2. 예제 2

    입력
    6 7
    .......
    .#..##.
    .#.....
    .#####.
    .##..#.
    ....###
    
    예상 출력
    7
    
  3. 예제 3

    입력
    4 4
    ####
    ####
    ####
    ####
    
    예상 출력
    0
    
  4. 예제 4

    입력
    6 6
    ...#..
    ##....
    #.#...
    .#....
    ..#...
    ..#..#
    
    예상 출력
    9