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

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

룩과 구슬

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

요약
각 숫자 칸에 적힌 수 이하의 구슬을 놓아 모든 룩의 가로 공격 범위 합과 세로 공격 범위 합이 같아지도록 하고 전체 개수를 최대화합니다.
난이도

어려움10점 중 8점

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

문제

체스의 룩은 한 번 이동할 때 자기 칸에서 상하좌우 네 방향 중 하나를 골라 원하는 만큼 갈 수 있다.

N×MN \times M 크기의 직사각형 격자판이 있다. 몇 개의 칸에는 룩을 하나씩 놓았고, 몇 개의 칸에는 장애물을 놓았다. 룩은 장애물을 뛰어넘지 못한다. 어느 방향으로 가든 장애물을 만나면 장애물 바로 앞 칸까지만 갈 수 있고, 판 밖으로 나갈 수도 없다. 룩이 한 번의 이동으로 갈 수 있는 칸을 그 룩의 공격 범위라고 하자. 그중 왼쪽과 오른쪽으로 갈 수 있는 칸이 가로 공격 범위, 위쪽과 아래쪽으로 갈 수 있는 칸이 세로 공격 범위이다.

판 위의 룩은 한 번의 이동으로는 서로를 공격할 수 없도록 놓여 있다. 룩도 장애물도 없는 칸에는 숫자가 하나씩 적혀 있고, 그 칸에는 적힌 숫자 이하만큼의 구슬을 놓을 수 있다. 단, 구슬을 놓을 때는 각 룩마다 가로 공격 범위에 놓인 구슬 개수의 합과 세로 공격 범위에 놓인 구슬 개수의 합이 같아야 한다.

구슬을 최대한 많이 놓으려고 한다. 판 위에 놓을 수 있는 구슬 개수의 최댓값을 구하라.

입력

첫째 줄에 판의 크기를 나타내는 두 정수 NN, MM (1≤N,M≤501 \le N, M \le 50)이 공백으로 구분되어 주어진다.

둘째 줄부터 NN개의 줄에 걸쳐 길이가 MM인 문자열이 한 줄에 하나씩 주어지며, 이는 판의 상태를 나타낸다. 문자열은 R, #, 그리고 0부터 9까지의 숫자로만 이루어져 있다. R은 룩이 놓인 칸, #은 장애물이 놓인 칸을 뜻하고, 숫자는 그 칸에 놓을 수 있는 구슬 개수의 상한을 뜻한다.

룩은 한 번의 이동으로는 서로를 공격할 수 없도록 놓여 있고, 판에 놓인 룩의 개수는 70개를 넘지 않는다.

출력

첫째 줄에 판 위에 놓을 수 있는 구슬 개수의 최댓값을 출력한다.

예제3

  1. 예제 1

    입력
    2 3
    123
    4R#
    예상 출력
    8
  2. 예제 2

    입력
    3 3
    9R9
    R#9
    999
    예상 출력
    27
  3. 예제 3

    입력
    2 5
    6#40R
    R9404
    예상 출력
    16