만드는 중입니다

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

도토리 문자열

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

요약
스크랫은 시작 칸에서 출발해 문자열 s의 글자 순서대로 도토리를 모을 때 필요한 최소 이동 시간을 구합니다.
난이도

보통10점 중 6점

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

문제

다람쥐 스크랫은 나이가 들고 지혜로워졌다. 예전처럼 그 도토리 한 개를 쫓는 대신, 이제는 여러 종류의 도토리를 모으고 싶어 한다. 도토리 종류는 26가지이며 'a'부터 'z'까지의 소문자로 표시한다. 스크랫이 모으려는 이상적인 수집품은 문자열 ss로 주어지고, ss의 ii번째 문자는 수집품의 ii번째 도토리 종류를 뜻한다.

스크랫이 있는 땅은 n×mn \times m 크기의 직사각형 격자다. 행은 위에서 아래로 1번부터 nn번까지, 열은 왼쪽에서 오른쪽으로 1번부터 mm번까지 번호를 매긴다. (x,y)(x, y)는 xx행 yy열의 칸을 뜻한다. 스크랫은 처음에 (sx,sy)(s_x, s_y) 칸에 있다. (i,j)(i, j) 칸에는 xi,jx_{i,j} 종류의 도토리만 있고, 그 수는 무한하다. 스크랫은 변을 공유하는 칸으로만 이동할 수 있으며, 한 번 이동할 때마다 정확히 1의 시간이 걸린다.

스크랫은 도토리를 ss에 적힌 순서대로만 줍는다. 예를 들어 ss가 ab이면 'a' 도토리보다 먼저 'b' 도토리를 주울 수 없다. 현재 서 있는 칸의 도토리를 줍는 데는 시간이 들지 않는다. 스크랫이 수집품 전체를 모으는 데 걸리는 최소 시간을 구하라.

입력

첫 줄에 땅의 크기를 나타내는 두 정수 nn과 mm이 주어진다 (1≤n,m≤3001 \le n, m \le 300). 둘째 줄에는 스크랫의 처음 위치를 나타내는 두 정수 sxs_x와 sys_y가 주어진다 (1≤sx≤n1 \le s_x \le n, 1≤sy≤m1 \le s_y \le m).

이어지는 nn개의 줄에는 각각 정확히 mm개의 소문자 영문자가 주어진다. ii번째 줄의 jj번째 문자는 (i,j)(i, j) 칸에서 자라는 도토리 종류 xi,jx_{i,j}이다. 모든 도토리 종류는 적어도 한 칸에 존재한다고 보장된다.

마지막 줄에는 이상적인 수집품의 도토리 종류 순서를 나타내는 소문자 문자열 ss가 주어진다 (1≤∣s∣≤3001 \le |s| \le 300).

출력

수집품 전체를 모으는 데 필요한 최소 시간을 한 줄에 출력한다.

힌트

첫 번째 예제에서 최적 경로는 첫 행의 'n'까지 12걸음에 가는 것이다. 그다음 한 칸 아래로 내려가 오른쪽에 나란히 있는 'u'와 't'를 줍는데, 이때 4걸음이 더 든다.

두 번째 예제에서 최적 경로는 다음 점들을 지난다. (4,4)(4, 4), 's'는 (5,5)(5, 5), 'q'는 (3,5)(3, 5), 'u'는 (5,3)(5, 3), 'i'는 (6,4)(6, 4), 'r'은 (4,5)(4, 5) (두 번), 'e'는 (4,6)(4, 6), 'l'은 (6,7)(6, 7).

예제2

  1. 예제 1

    입력
    2 26
    1 1
    abcdefghijklmnopqrstuvwxyz
    abtxyzutalkhfdyutxzbzhhawj
    nut
    
    예상 출력
    17
    
  2. 예제 2

    입력
    7 7
    4 4
    abcdefg
    xyzabch
    wnopqdi
    vmvwrej
    ulutsfk
    tkjihgl
    srqponm
    squirrel
    
    예상 출력
    17