문제 보기 - On grid (kriii2_O)

시간 제한 메모리 제한 제출 횟수 통과한 사람 수 비율
1000 ms 256 MiB 112 17 15.18%

명우는 각 칸 위에 정수가 하나씩 적혀 있는 RC 열의 격자를 하나 가지고 있다. 또한, 명우는 매우 다양한 크기의 직사각형 판들을 가지고 있어서 주어진 격자를 여러 개의 직사각형 판으로 덮는 놀이를 하려고 한다. 명우는 다음과 같이 규칙을 정했다.

격자를 직사각형 판으로 덮을 때는 격자와 평행하게 덮어야 하며, 어떤 격자 칸의 일부만 덮는 것은 허용되지 않는다. 처음에 직사각형 판을 덮을 때에는 첫 번째 행의 첫 번째 열을 무조건 포함하도록 판을 덮어야 한다. 다음에 덮는 직사각형부터는 바로 직전에 덮은 직사각형의 오른쪽 아래 꼭짓점에 닿도록 직사각형 판을 덮어야 한다. 이때 서로의 모서리는 닿으면 안 된다. 그리고 마지막으로 덮는 직사각형은 R 번째 행의 C 번째 열을 무조건 포함하게 덮어야 한다. 오른쪽의 그림은 8행 8열의 격자 위에 직사각형 판을 잘 덮은 예이다.

격자를 직사각형 판들로 덮은 뒤에 명우는 점수를 계산하는데 이는 직사각형에 덮인 격자 칸들에 적힌 정수를 모두 더한 값이다. 명우가 가진 격자가 주어질 때, 점수를 최대화하여 직사각형을 덮으면 몇 점이 될지 구하여라.

입력 형식

첫 번째 줄에는 두 자연수 R, C가 주어진다.

다음 R개의 줄에는 절댓값이 104을 넘지 않는 C개의 정수가 공백으로 구분되어 주어진다.

쉬운 문제에서는 1 ≤ R, C ≤ 30인 입력이 주어진다.

어려운 문제에서는 1 ≤ R, C ≤ 300인 입력이 주어진다.

출력 형식

격자를 직사각형 판들로 덮을 때 얻을 수 있는 가장 큰 점수를 출력한다.

예제 입력 예제 출력
2 2
1 -1
-1 1
2
5 5
4 -2 3 -4 2
-2 1 1 4 -2
-3 1 -1 2 5
2 -4 2 3 5
1 -4 4 -1 -2
22