월요병
면접 대비시간 제한1초메모리 제한512 MB
건설 비용이 있는 칸, 벽이 있는 칸, 벽을 세울 수 없는 칸으로 이루어진 N×M 격자에서 (1,1)에서 (N,M)으로 가는 모든 경로를 막는 최소 비용을 구하고, 막을 수 없으면 -1을 출력한다.
문제
일요일 밤, 내일 학교에 갈 생각을 하니 괴로워지기 시작했다.
학교에 가지 않을 핑계를 만들려고, 집에서 학교로 가는 길에 벽을 세워 모든 길을 막기로 했다.
동네는 칸의 격자로 이루어져 있다. 집은 에, 학교는 에 있다.
각 칸은 다음 세 종류 중 하나이다.
- 이미 벽이 있는 칸 (로 나타낸다)
- 벽이 없고, 벽을 세울 수도 없는 칸 (로 나타낸다)
- 벽이 없고, 비용을 내면 벽을 세울 수 있는 칸 (그 비용으로 나타낸다)
세 번째 종류의 칸에 적절히 벽을 세워 집에서 학교로 가는 길을 모두 막으려 한다. 돈을 아끼기 위해 드는 비용은 최소로 하고 싶다. 어떻게 벽을 세워도 길을 막을 수 없는 경우도 있으니, 그런 경우도 판단해야 한다.
집에서 학교로 이동할 때는 상하좌우로만 움직일 수 있고(대각선으로는 움직일 수 없다), 격자 밖으로 나갈 수 없다. 벽이 있는 칸으로는 들어갈 수 없다. 집과 학교가 있는 칸은 벽을 세울 수 없는 칸임이 보장된다.
입력
첫째 줄에 지도의 행의 수 과 열의 수 이 공백으로 구분되어 주어진다. ()
다음 개의 줄에는 각각 개의 정수가 주어진다. 번째 줄의 번째 정수는 칸 의 정보이다. 는 이미 벽이 있는 칸, 은 벽을 세울 수 없는 칸이다. 이상의 정수는 벽을 세울 수 있는 칸이며, 그 값이 벽을 세우는 비용이다. 비용은 이하의 정수이다.
집과 학교가 있는 칸 과 에는 항상 이 주어진다.
출력
첫째 줄에 학교에 갈 수 없게 만드는 최소 비용을 출력한다. 어떻게 해도 길을 막을 수 없다면 을 출력한다.
힌트
첫 번째 예제는 다음과 같이 막으면 된다. #은 원래 있던 벽, *는 새로 세운 벽, .은 벽이 없는 칸이다.
..#
.*.
.*.
새로 세운 벽 두 개의 비용은 각각 이므로 총비용은 이다.