만드는 중입니다

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

칸 막기

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

요약
n×m 격자에서 서로 다른 빈 칸 두 개를 막아 (1, 1)에서 (n, m)으로 오른쪽 또는 아래로만 가는 경로가 없어지는 방법의 수를 구합니다.
난이도

보통10점 중 7점

유형
동적 계획법, 조합론, 행렬
정답자
아직 제출이 없습니다

문제

n×mn \times m 크기의 격자가 주어지고, 일부 칸은 막혀 있다.

비어 있는 서로 다른 칸 두 개를 막아서, 빈 칸만 지나며 아래 또는 오른쪽으로만 이동하는 (1,1)(1, 1)에서 (n,m)(n, m)으로 가는 경로가 없도록 하는 방법의 수를 구하라.

(1,1)(1, 1)과 (n,m)(n, m)을 막는 것도 허용된다. 두 칸은 처음부터 막혀 있을 수도 있다.

입력

첫째 줄에 격자의 행 수와 열 수를 나타내는 정수 nn과 mm (1≤n,m≤30001 \le n, m \le 3000)이 주어진다.

이후 nn개의 줄에는 각각 mm개의 문자가 주어진다. ii번째 줄의 jj번째 문자가 '.'이면 (i,j)(i, j) 칸은 비어 있고, '*'이면 막혀 있다.

출력

두 칸을 막는 방법 중, 빈 칸만 지나며 오른쪽 또는 아래로만 이동하는 (1,1)(1, 1)에서 (n,m)(n, m)으로 가는 경로가 없게 만드는 경우의 수를 정수 하나로 출력한다.

힌트

첫 번째 입력에서 (1,1)(1, 1) 또는 (3,3)(3, 3) 중 하나와 다른 칸 하나를 막으면 유효한 경로가 없다. 이러한 경우는 8+8−18 + 8 - 1가지이다. 또 (1,2)(1, 2)와 (2,1)(2, 1)을 막거나, (3,2)(3, 2)와 (2,3)(2, 3)을 막아도 유효한 경로가 없으므로 답은 8+8−1+2=178 + 8 - 1 + 2 = 17이다.

두 번째 입력에서는 칸 두 개를 어떻게 막아도 경로가 없으므로 답은 (62)=15\binom{6}{2} = 15이다.

세 번째 입력에서는 처음부터 (1,1)(1, 1)에서 (n,m)(n, m)으로 가는 경로가 없다. 어떤 두 칸을 막아도 이 상태는 그대로이므로 답은 (42)=6\binom{4}{2} = 6이다.

예제3

  1. 예제 1

    입력
    3 3
    ...
    ...
    ...
    
    예상 출력
    17
    
  2. 예제 2

    입력
    3 3
    .**
    .*.
    ...
    
    예상 출력
    15
    
  3. 예제 3

    입력
    3 4
    ****
    ....
    ****
    
    예상 출력
    6