만드는 중입니다

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

농지 평탄화

시간 제한1초메모리 제한256 MB

요약
각 칸의 높낮이를 정해 변경 비용과 높이가 다른 이웃 칸 사이 경계 비용의 합을 최소화합니다.
난이도

보통10점 중 7점

유형
그래프
정답자
아직 제출이 없습니다

문제

농부 존은 봄 수확을 앞두고 밭을 손보고 있다. 작년에는 트랙터가 언덕을 오르내리느라 연료를 예상보다 많이 써서 예산을 넘겼다.

수확할 때 트랙터는 밭 전체를 가로로도 세로로도 지나간다. 아래 그림에서 밝은 초록은 낮은 땅, 짙은 초록은 높은 땅이고, 빨간 선은 높이가 다른 두 칸이 맞닿은 경계다. 트랙터는 이 경계를 모두 넘어야 하므로 그림의 밭에서는 여덟 번 오르내린다.

밭은 N×MN \times M 격자로 나뉘어 있고, 각 칸의 높이는 낮음과 높음 두 가지뿐이다. 존은 씨를 뿌리기 전에 불도저를 불러 원하는 칸의 높이를 바꿀 수 있다. 한 칸을 낮음에서 높음으로, 또는 높음에서 낮음으로 바꾸는 데 BB유로가 든다.

작업이 끝난 뒤, 변끼리 맞닿은 두 칸의 높이가 서로 다르면 그 경계마다 트랙터 연료비로 AA유로가 더 든다.

따라서 존이 올해 내는 금액은 높이를 바꾼 칸의 수에 BB를 곱한 값과, 작업이 끝난 밭에서 높이가 서로 다른 인접한 칸 쌍의 수에 AA를 곱한 값의 합이다. 이 금액의 최솟값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 네 정수 NN, MM, AA, BB가 공백으로 구분되어 주어진다. 밭의 크기는 N×MN \times M이고, AA는 높이가 다른 두 인접한 칸의 경계를 지날 때 드는 비용, BB는 한 칸의 높이를 바꾸는 비용이다.

다음 NN개 줄에는 각각 MM개의 문자가 주어져 밭의 현재 상태를 나타낸다. .은 낮은 땅, #은 높은 땅이다.

출력

존이 내야 하는 최소 금액을 한 줄에 출력한다.

제한

  • 1≤N,M≤501 \le N, M \le 50 (밭의 크기)
  • 1≤A,B≤1000001 \le A, B \le 100000 (경계를 지나는 비용과 한 칸의 높이를 바꾸는 비용)

힌트

예제의 밭은 5×45 \times 4이다. 높이가 다른 두 칸의 경계를 지나는 데 1000유로, 한 칸의 높이를 바꾸는 데 2000유로가 든다.

답은 11000유로다. 외따로 떨어진 높은 칸 하나를 낮추는 데 2000유로, 남은 아홉 개의 경계를 지나는 연료비로 9000유로가 든다.

아무 칸도 바꾸지 않으면 12000유로, 높은 칸을 모두 낮추면 18000유로, 낮은 칸을 모두 높이면 22000유로가 든다.

예제6

  1. 예제 1

    입력
    5 4 1000 2000
    ...#
    #..#
    ...#
    ##..
    ###.
    
    예상 출력
    11000
    
  2. 예제 2

    입력
    1 1 1 1
    .
    
    예상 출력
    0
    
  3. 예제 3

    입력
    3 3 5 7
    ...
    ...
    ...
    
    예상 출력
    0
    
  4. 예제 4

    입력
    1 10 3 100000
    .#.#.#.#.#
    
    예상 출력
    27
    
  5. 예제 5

    입력
    4 4 100000 1
    #.#.
    .#.#
    #.#.
    .#.#
    
    예상 출력
    8
    
  6. 예제 6

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