행렬 경로 문제 2
\(N \times N\) 크기의 행렬이 주어진다. 행렬의 각 칸에는 정수가 하나씩 적혀 있다.
행렬의 왼쪽 위 칸인 \((1, 1)\)에서 출발하여 오른쪽 아래 칸인 \((N, N)\)까지 이동하려고 한다.
이동할 때는 오직 오른쪽 또는 아래쪽으로만 한 칸씩 이동할 수 있다.
이동하는 과정에서 지정된 특정 거점 \((r, c)\)를 반드시 거쳐서 \((N, N)\)에 도달해야 한다.
이때 거쳐간 칸들에 적힌 수들의 합(경로의 합) 중 최댓값을 구하는 프로그램을 작성하시오.
(1,1)과 (N,N)도 거점이 될 수 있다.
입력
첫째 줄에 행렬의 크기 \(N\) (\(2 \le N \le 1000\))이 주어진다.
둘째 줄에 반드시 거쳐야 하는 거점의 위치 \(r, c\) (\(1 \le r, c \le N\))가 공백으로 구분되어 주어진다.
셋째 줄부터 \(N\)개의 줄에 걸쳐 행렬의 각 행에 적힌 \(N\)개의 정수가 공백으로 구분되어 주어진다. (\(0 \le \text{cell} \le 1000\))
출력
첫째 줄에 \((1, 1)\)에서 출발하여 \((r, c)\)를 거쳐 \((N, N)\)에 도달하는 경로의 합 중 최댓값을 출력한다.
제한사항
- \(2 \le N \le 1000\)
- \(1 \le r, c \le N\)
- \(0 \le \text{행렬의 각 원소} \le 1000\)
예제 입력 1
3
2 2
1 2 3
4 5 6
7 8 9
예제 출력 1
27
예제 설명
\((1,1) \to (2,1) \to (2,2) \to (3,2) \to (3,3)\) 경로로 \((2,2)\)를 반드시 지나면 \(1 + 4 + 5 + 8 + 9 = 27\)이 되어 최댓값이 됩니다.
코멘트