포닉스와 달구

시간 제한1.5초메모리 제한1024 MB

요약
달구가 두 모서리를 피해 K×K 영역을 막으면 포닉스가 오른쪽·아래 이동만으로 지나는 칸 가중치 합을 최대화할 때, 두 사람이 최선을 다한 뒤의 점수를 구한다.
난이도

어려움10점 중 8점

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

문제

포닉스와 달구는 N×NN \times N 크기의 격자 위에서 놀이를 하려고 한다. 이 격자의 ii행 jj열에 위치한 칸에는 가중치 A_i,jA\_{i, j}가 있다. 놀이의 방법은 아래와 같다.

  • 달구는 K×KK \times K 크기의 영역을 하나 골라서, 해당 영역의 칸들을 윤이에게 선물로 준다. 단, 달구가 선물할 영역에는 격자의 11행 11열과 NN행 NN열이 포함되면 안 된다.
  • 포닉스는 처음에 격자의 11행 11열에 있고, NN행 NN열에 도달할 때까지 이동한다. 포닉스는 현재 위치한 칸이 rr행 cc열일 때, r+1r+1행 cc열 또는 rr행 c+1c+1열로 이동할 수 있다. 단, 격자 밖이나 윤이가 선물받은 칸으로는 이동할 수 없다.
  • 포닉스가 얻을 수 있는 점수는 포닉스가 지나간 칸에 포함된 가중치의 합이다.

포닉스는 점수를 최대로 얻고자 하고, 달구는 포닉스의 점수가 최소가 되도록 영역을 고르고자 한다. 포닉스와 달구는 모두 최선을 다해 놀이를 진행한다고 가정했을 때, 포닉스가 얻을 수 있는 점수의 최댓값을 구해보자.

입력

첫째 줄에 격자의 크기 NN과 KK가 공백으로 구분되어 주어진다. (2≤N≤2 000;1≤K<N)(2 \le N \le 2\ 000; 1 \le K < N)

다음 NN개의 줄에는 NN개의 정수 A_i,1,A_i,2,⋯ ,A_i,NA\_{i, 1}, A\_{i, 2}, \cdots, A\_{i, N}이 공백으로 구분되어 주어진다. (0≤A_i,j≤10 000)(0 \le A\_{i, j} \le 10\ 000)

출력

포닉스가 얻을 수 있는 점수의 최댓값을 출력한다.

예제1

  1. 예제 1

    입력
    5 3
    4 8 13 2 5
    0 7 7 3 12
    25 3 11 5 6
    9 12 0 28 3
    1 13 5 8 9
    
    예상 출력
    65