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