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

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

스택 미로

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

요약
격자에서 오른쪽이나 아래로만 이동하며 문자로 표시된 보석을 주워 스택 순서에 따라 같은 문자의 구멍에 넣어 매칭 수를 최대화합니다.
난이도

어려움10점 중 8점

유형
동적 계획법, 스택, 그래프
정답자
아직 제출이 없습니다

문제

미로는 가로 WW칸, 세로 HH칸인 격자다. 왼쪽 위 칸을 (1,1)(1, 1), 오른쪽 아래 칸을 (W,H)(W, H)로 나타낸다. 지금 (1,1)(1, 1)에 있고 (W,H)(W, H)까지 가야 하는데, 이동은 오른쪽으로 한 칸 또는 아래로 한 칸만 할 수 있다.

다음은 미로의 한 예다.

...#......
a###.#####
.bc...A...
##.#C#d#.#
.#B#.#.###
.#...#e.D.
.#A..###.#
..e.c#..E.
####d###.#
#....#.#.#
##E...d.C.

미로의 어떤 칸은 비어 있고(.), 어떤 칸은 바위가 막고 있다(#). 바위 칸에는 들어갈 수 없다. 빈 칸 중 일부에는 보석이 놓여 있고(소문자), 일부에는 보석을 끼우는 구멍이 있다(대문자). 알파벳이 다르면 보석의 종류도 다르다. 즉 a 칸에는 A 종류의 보석이 있고, A 칸에는 A 종류의 보석을 끼우는 구멍이 있다. 보석을 맞는 구멍에 끼우면 좋은 일이 생긴다고 한다.

보석이 있는 칸에서는 그 보석을 집을지 말지 고를 수 있다. 구멍이 있는 칸에서는 가진 보석을 끼울지 말지 고를 수 있다. 처음에는 보석이 하나도 없다. 가방은 아주 커서 보석을 몇 개든 넣을 수 있다. 대신 가방은 스택이라, 가장 마지막에 집은 보석만 꺼내서 끼울 수 있다.

(1,1)(1, 1)에서 (W,H)(W, H)까지 가는 동안 맞는 구멍에 끼울 수 있는 보석은 최대 몇 개인가?

입력

입력은 여러 개의 데이터 집합으로 이루어진다. 0이 두 개 적힌 줄이 나오면 입력이 끝나고, 그 줄은 데이터 집합이 아니다.

각 데이터 집합의 형식은 다음과 같다.

H W
C11C12...C1W
C21C22...C2W
...
CH1CH2...CHW

HH와 WW는 격자의 세로와 가로 크기이고, 1≤W,H≤501 \le W, H \le 50이다. 이어지는 HH개의 줄에는 각각 WW개의 문자가 빈칸 없이 붙어서 온다. ii번째 줄의 jj번째 문자 CijC_{ij}는 ii행 jj열 칸의 종류를 위에서 설명한 대로 나타낸다. 출발 칸인 1행 1열과 도착 칸인 HH행 WW열은 절대 #이 아니다.

한 데이터 집합에서 각 소문자와 각 대문자는 많아야 10번 나온다.

출력

각 데이터 집합마다 맞는 구멍에 끼울 수 있는 보석의 최대 개수를 한 줄에 하나씩 출력한다. (W,H)(W, H) 칸에 도달할 수 없으면 -1을 출력한다.

예제2

  1. 예제 1

    입력
    3 3
    ac#
    b#C
    .BA
    3 3
    aaZ
    a#Z
    aZZ
    3 3
    ..#
    .#.
    #..
    1 50
    abcdefghijklmnopqrstuvwxyYXWVUTSRQPONMLKJIHGFEDCBA
    1 50
    aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyY
    1 50
    abcdefghijklmnopqrstuvwxyABCDEFGHIJKLMNOPQRSTUVWXY
    1 50
    aaaaaaaaaabbbbbbbbbbcccccCCCCCBBBBBBBBBBAAAAAAAAAA
    10 10
    ...#......
    a###.#####
    .bc...A...
    ##.#C#d#.#
    .#B#.#.###
    .#...#e.D.
    .#A..###.#
    ..e.c#..E.
    ####d###.#
    ##E...D.C.
    0 0
    
    예상 출력
    2
    0
    -1
    25
    25
    1
    25
    4
    
  2. 예제 2

    입력
    1 4
    abAB
    1 4
    abBA
    1 6
    abcCBA
    1 5
    aAaAa
    0 0
    
    예상 출력
    1
    2
    3
    2