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

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

슈퍼 배관공

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

요약
그리드의 왼쪽 아래에서 오른쪽 아래까지 이동하며 코인을 최대로 모으는 경로를 구한다. 오른쪽, 위, 아래로만 움직일 수 있고 이미 지난 칸은 다시 밟을 수 없다.
난이도

보통10점 중 5점

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

문제

슈퍼 배관공(SP)이 장애물 코스를 헤쳐 나가며 상품을 모으고, 오른쪽 아래에 있는 공주(TP)를 구출하는 비디오 게임을 위한 프로그램을 작성한다.

장애물 코스는 m×nm \times n 격자다. SP는 왼쪽 아래 칸에서 출발해 오른쪽 아래 칸에 있는 공주에게 도달해야 한다. 일부 칸에는 SP가 통과할 수 없는 장애물이 있고, 다른 칸에는 $1.00부터 $9.00까지의 값을 가진 금화가 놓여 있다.

이 게임은 전통적인 횡스크롤 게임이므로 SP는 오른쪽, 위, 아래로만, 한 번에 한 칸씩, 장애물이 없는 인접한 칸으로만 이동할 수 있다. 이미 지나온 칸에는 다시 들어갈 수 없다. 즉, 위로 이동한 뒤에는 다음에 오른쪽으로 이동하기 전까지 아래로 내려갈 수 없고, 아래로 이동한 뒤에는 다음에 오른쪽으로 이동하기 전까지 위로 올라갈 수 없다. SP는 지나는 모든 칸의 금화를 획득한다. 왼쪽 아래 칸에서 오른쪽 아래 칸까지 가는 경로에서 SP가 모을 수 있는 금화 값의 합의 최댓값을 구하라.

입력

입력은 여러 개의 테스트 케이스로 이루어진다. 각 테스트 케이스의 첫 줄에는 두 정수 mm과 nn이 주어진다 (2≤m,n≤1002 \le m, n \le 100). 이어서 nn개의 문자로 이루어진 mm개의 줄로 격자가 주어진다.

  • *는 장애물을,
  • 숫자 1~9는 그 값을 가진 금화를,
  • .은 빈 칸을 나타낸다.

SP가 공주에게 도달하는 것은 항상 가능하다. 마지막 테스트 케이스 뒤에는 0 0으로 이루어진 줄이 오며, 이 줄은 처리하지 않는다.

출력

각 테스트 케이스마다 한 줄에, 왼쪽 아래 칸에서 오른쪽 아래 칸까지 가는 올바른 경로에서 SP가 모을 수 있는 금화 값의 합의 최댓값을 출력한다. 모든 금화는 정수 달러 값이므로 답은 정수이며, 달러 기호나 소수 부분 없이 정수로 출력한다.

예제1

  1. 예제 1

    입력
    5 10
    ..3.......
    ..........
    ..7.**....
    .9**...1..
    ..8..9....
    2 2
    99
    88
    0 0
    
    예상 출력
    27
    34