켜거나 끄거나
시간 제한7초메모리 제한512 MB
격자가 트리 구조인 사무실에서 M개의 방을 순서대로 방문하며, 불을 켜 두거나 끄는 선택으로 전력 소비와 스위치 비용의 합을 최소화한다.
문제
전기를 아끼는 것은 매우 중요하다!
당신은 벽과 방으로 이루어진 R×C 격자로 표현되는 사무실에 있다. 사무실의 어떤 두 방 사이에도 정확히 하나의 경로가 존재한다. 인접한 방으로 이동하는 데 1 단위의 시간이 걸린다. 방은 너무 어두워서 방에 들어갈 때에는 불을 켜야 한다. 방을 나갈 때에는 불을 켜 둔 채로 나갈 수도 있고, 물론 불을 끌 수도 있다. 불이 켜져 있는 동안 각 방은 계속 전력을 소비한다.
오늘 당신은 사무실 곳곳에서 많은 작업을 해야 한다. 작업들은 좌표의 목록으로 주어지며, 주어진 순서대로 해내야 한다. 전기를 아끼기 위해, 당신은 모든 작업을 최소한의 전력량으로 끝내고 싶다.
그런데 문제는 그렇게 간단하지 않다. 불이 켜져 있을 때뿐만 아니라 불을 켜고 끌 때에도 전기를 소비하기 때문이다. 다행히도 당신은 단위 시간당 전력 소비 비용과, 사무실의 모든 방에 대해 불을 켜고 끄는 비용을 알고 있다. 게다가 당신은 매우 똑똑해서 작업 자체를 수행하는 데에는 시간이 걸리지 않는다. 그러니 전력 소비량을 최소로 만드는 최적의 전략을 알아내라.
모든 작업을 끝낸 뒤에는, 어떤 방에도 불을 켜 둔 채로 두지 마라. 그건 분명히 낭비다!
입력
입력의 첫 줄에는 세 개의 양의 정수 R(0<R≤50), C(0<C≤50), M(2≤M≤1000)이 주어진다. 다음 R개의 줄은 각각 C개의 문자를 포함하며 사무실의 배치를 나타낸다. '.'은 방을, '#'은 벽을 나타낸다.
그다음에는 각각 R개의 행과 C개의 열을 가진 세 개의 행렬이 주어진다. 각 행렬의 모든 원소는 양의 정수이다. 첫 번째 행렬의 (r,c) 원소는 좌표 (r,c)에 있는 방의 단위 시간당 전력 소비량을 나타낸다. 두 번째 행렬과 세 번째 행렬의 (r,c) 원소는 각각 좌표 (r,c)에 있는 방의 불을 켜는 비용과 끄는 비용을 나타낸다.
마지막 M개의 줄은 각각 두 개의 양의 정수를 포함하며, 작업을 수행할 방의 좌표를 나타낸다.
j번째 작업(0≤j≤i)이 하나라도 남아 있다면 i번째 작업을 수행할 수 없다.
출력
모든 작업을 끝냈을 때 소비한 최소 전력량을 정수 하나로 출력한다.