격자 이동 3


답안 제출

Points: 7
시간 제한: 2.0s
메모리 제한: 1G

문제 유형

\(N\)행 \(M\)열의 격자가 있다. 각 칸에는 정수가 하나씩 적혀 있다.

왼쪽 위 칸인 \((1,1)\)에서 출발하여 오른쪽 아래 칸인 \((N,M)\)까지 이동하려고 한다. 현재 칸에서 다음 세 방향 중 하나로 이동할 수 있다.

  • 오른쪽: \((r,c)\)에서 \((r,c+1)\)로 이동한다.
  • 아래쪽: \((r,c)\)에서 \((r+1,c)\)로 이동한다.
  • 오른쪽 아래 대각선: \((r,c)\)에서 \((r+1,c+1)\)로 이동한다.

격자 밖으로 이동할 수 없다. 경로에 포함된 모든 칸의 값을 더했을 때 얻을 수 있는 합의 최댓값을 구하여라. 시작 칸과 도착 칸의 값도 합에 포함한다.

입력

첫째 줄에 격자의 행의 수 \(N\)과 열의 수 \(M\)이 공백으로 구분되어 주어진다.

다음 \(N\)개의 줄에 걸쳐 격자에 적힌 정수가 주어진다. 이 중 \(i\)번째 줄의 \(j\)번째 정수는 \((i,j)\)에 적힌 값 \(A_{i,j}\)이다.

출력

가능한 경로에서 얻을 수 있는 합의 최댓값을 출력한다.

제한

  • \(1 \le N,M \le 1,000\)
  • \(-1,000 \le A_{i,j} \le 1,000\)
  • 입력으로 주어지는 값은 모두 정수이다.

예제 입력

3 3
1 -100 3
-100 10 -100
3 -100 20

예제 출력

31

두 번의 오른쪽 아래 대각선 이동으로 값이 \(1\), \(10\), \(20\)인 칸을 지나면 합은 \(31\)이다.


코멘트

현재 작성된 코멘트가 없습니다.