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

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

사과와 바나나

면접 대비

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

요약
우하향 대각선을 포함한 우측과 하향 이동으로 좌상단에서 우하단까지 경로를 정해 아래쪽 사과와 위쪽 바나나 합을 최대화합니다.
난이도

보통10점 중 6점

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

문제

이웃한 두 마을 A와 B가 땅을 두고 다투고 있다. 분쟁 지역은 R×CR \times C개의 칸으로 이루어진 직사각형이고, 각 칸에는 사과나무 몇 그루 또는 바나나나무 몇 그루가 심겨 있다.

중재를 맡은 고문은 이 지역에 불도저를 한 대 통과시켜 불도저가 지나간 칸의 나무를 모두 베어내기로 했다. 불도저는 왼쪽 위 칸에서 출발해 오른쪽, 아래쪽, 오른쪽 아래 대각선 중 한 방향으로만 움직이고, 오른쪽 아래 칸에 도착하면 멈춘다.

불도저가 낸 길을 기준으로 길 아래쪽 땅은 A 마을이, 길 위쪽 땅은 B 마을이 가진다. 각 행에서 불도저가 지나간 칸보다 왼쪽에 있는 칸이 길 아래쪽이고, 오른쪽에 있는 칸이 길 위쪽이다. 한 마을이 칸을 하나도 받지 못할 수도 있다.

A 마을 사람은 사과를 좋아하고 B 마을 사람은 바나나를 좋아한다. 고문은 길 아래쪽에 남은 사과나무 수와 길 위쪽에 남은 바나나나무 수의 합이 최대가 되도록 길을 정하려고 한다. 이 합의 최댓값을 구하는 프로그램을 작성하시오.

입력

첫째 줄에 지역의 크기를 나타내는 정수 RR과 CC가 주어진다. (2≤R,C≤15002 \le R, C \le 1500)

다음 RR개 줄에는 각각 칸 CC개의 정보가 공백으로 구분되어 주어진다. 한 칸의 정보는 사과를 뜻하는 문자 A 또는 바나나를 뜻하는 문자 B 뒤에 그 칸에 심긴 나무 수를 붙여 쓴 것이다. 한 칸의 나무 수는 11 이상 9999 이하이다.

출력

위에서 설명한 나무 수의 합의 최댓값을 출력한다.

힌트

첫 번째 예제에서 불도저가 오른쪽 아래 대각선, 오른쪽 아래 대각선, 아래 순서로 움직이면 길 아래쪽에 사과나무가 3+2+4=93 + 2 + 4 = 9그루, 길 위쪽에 바나나나무가 3+5=83 + 5 = 8그루 남는다.

예제6

  1. 예제 1

    입력
    4 3
    B2 B3 B5
    A3 B1 A1
    A2 A4 B1
    B1 B3 A3
    
    예상 출력
    17
    
  2. 예제 2

    입력
    3 5
    A5 A2 B3 A6 B2
    A1 B20 A5 B3 B6
    A3 A5 B3 B8 A3
    
    예상 출력
    37
    
  3. 예제 3

    입력
    2 2
    A9 A9
    B9 B9
    
    예상 출력
    0
    
  4. 예제 4

    입력
    2 2
    B1 B99
    A99 A1
    
    예상 출력
    198
    
  5. 예제 5

    입력
    2 8
    B7 A4 B9 A1 B3 B8 A2 B6
    A5 A9 B2 A7 A1 B4 A8 A3
    
    예상 출력
    40
    
  6. 예제 6

    입력
    8 2
    A6 B1
    B4 A9
    A2 A5
    B8 B3
    A7 A1
    B2 B9
    A4 A6
    B5 A2
    
    예상 출력
    17