아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

쇼핑

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

요약
오른쪽과 아래쪽으로만 이동하며 (1,1)에서 (H,W)까지 가는 경로 중 매번 이웃 상점 하나를 제외하고 지불하는 금액이 가장 작은 경로를 구합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 최단 경로
정답자
아직 제출이 없습니다

문제

격자 모양의 도시가 있다. 도시는 HH행 WW열이고, 각 칸에는 가게가 하나 있거나 아무것도 없다. 가게마다 파는 물건이 서로 다르며, 물건 하나의 가격은 1 이상 9 이하의 정수다.

당신은 칸 (1,1)(1, 1)에서 출발해 칸 (H,W)(H, W)까지 걸어간다. 이동은 오른쪽 칸이나 아래 칸으로만 할 수 있다.

출발 칸을 포함해 어떤 칸에 도착할 때마다 다음 순서로 쇼핑한다.

  1. 도착한 칸에 아직 물건을 사지 않은 가게가 있으면 그 물건을 산다.
  2. 도착한 칸과 상하좌우로 인접한 칸 가운데, 아직 물건을 사지 않은 가게가 있는 칸을 모두 모은다. 그런 칸이 하나라도 있으면 그중 정확히 한 칸을 골라 건너뛰고 나머지 칸의 물건을 모두 산다. 그런 칸이 없으면 아무것도 사지 않는다.

한 가게에서는 물건을 한 번만 산다. 2번에서 어느 칸을 건너뛸지는 매번 자유롭게 고른다. 한 번 건너뛴 가게라도 나중에 그 옆 칸에 다시 도착하면 그때 사게 된다.

경로와 건너뛸 칸을 모두 최선으로 골랐을 때 쓰는 금액의 최솟값을 구하시오.

입력

첫째 줄에 도시의 행 수와 열 수를 나타내는 정수 HH와 WW가 공백으로 구분되어 주어진다. (3≤H≤10003 \le H \le 1000, 3≤W≤10003 \le W \le 1000)

둘째 줄부터 HH개의 줄에 길이가 WW인 문자열이 한 줄에 하나씩 주어진다. ii번째 줄의 jj번째 문자는 칸 (i,j)(i, j)의 상태를 나타낸다. 문자가 "."이면 그 칸에는 가게가 없고, "1"부터 "9"까지의 숫자면 그 칸에 가게가 있으며 그 숫자가 물건의 가격이다.

출력

첫째 줄에 쓰는 금액의 최솟값을 출력한다.

예제2

  1. 예제 1

    입력
    5 5
    ..483
    .59.9
    3.866
    79...
    4.8..
    
    예상 출력
    20
    
  2. 예제 2

    입력
    12 10
    ..498522.4
    .633527629
    54.4621596
    634.213458
    1924518685
    7739539767
    276155.3.6
    87716372.2
    .858877595
    7998739511
    3438.5852.
    568.9319..
    
    예상 출력
    63