연습문제

나무 수확

난이도
Lv. 3
제출
1,030 명
참가자
263 명
정답률
25.39 %
지원 언어
C
C++
Java
Python
JavaScript
언어별 시간/메모리
언어별 시간/메모리 표
언어 시간 메모리
JavaScript 1초 1024MB
C++ 1초 1024MB
C 1초 1024MB
Java 3초 1024MB
Python 1초 1024MB

남우는 나무를 잘 키워내 최대로 열매를 수확하려고 합니다. n×n 크기의 격자 내 각 칸에 씨앗이 정확히 하나씩 들어가 있고, 각 칸에 있는 씨앗을 키웠을 때 얻을 수 있는 열매 수확량이 주어집니다. 다음은 n이 3인 경우의 예시입니다.





씨앗을 키우기 위해서는 수로를 설치해야 합니다. 이때 비용 때문에 가장 좌측 위에 있는 (1, 1) 위치에서부터 수로 설치를 시작하여, 인접한 오른쪽 혹은 아래쪽 중 한곳을 선택하여 이동하여 정확히 (n, n) 위치를 끝으로 수로 설치를 마쳐야만 합니다. 예로 다음과 같이 수로 설치를 진행할 수 있습니다.





수로 설치가 완료되면 설치한 수로 중 원하는 칸 하나를 골라 그 위치에 스프링클러를 놓을 수 있습니다. 스프링클러가 놓인 칸의 경우 씨앗으로부터 얻을 수 있는 열매 수확량을 2배로 늘릴 수 있습니다. 만약 수로를 놓은 (1행, 3열)을 선택하게 된다면 다음과 같이 해당 칸의 열매 수확량이 6이 됩니다. 이렇게 수로와 스프링클러를 설치하게 되면 해당 칸들의 나무가 자라게 되어 최종적으로 얻게 되는 총 열매 수확량은 14(=1 + 3 + 6 + 3 + 1)가 됩니다.




만약 처음 그림에서 다음과 같이 수로와 스프링클러를 설치하게 되면, 총 15(=1+2+10+1+1)만큼 열매 수확을 할 수 있게 됩니다.




초기 격자의 상태가 주어졌을 때 수로와 스프링클러를 적절하게 설치하여 얻을 수 있는 열매 수확량의 합을 최대로 만드는 프로그램을 작성해보세요.


본 문제의 저작권은 (주)브랜치앤바운드에 있으며, 저작자의 동의 없이 무단 전재/복제/배포를 금지합니다.

제약조건

  • 2 ≤ n ≤ 1,000
  • 1 ≤ 열매 수확량 ≤ 1,000

입력형식

첫 번째 줄에는 격자의 크기를 나타내는 n 이 주어집니다.
두 번째 줄 부터는 n 개의 줄에 걸쳐 각 행에 해당하는 열매 수확량 n 개가 공백을 사이에 두고 주어집니다.

출력형식

첫 번째 줄에 수로와 스프링클러를 잘 설치하여 얻을 수 있는 열매 수확량의 합 중 최댓값을 출력합니다.

스프링클러는 꼭 설치된 수로 위에만 놓을 수 있음에 유의합니다.

입력예제1

3 1 3 3 2 1 3 5 1 1

출력예제1

15

입력예제2

3 1 4 4 2 1 4 5 1 1

출력예제2

18

입력예제3

4 5 5 4 6 3 5 4 5 6 5 5 5 5 5 5 5

출력예제3

41