[BOJ 10907] On grid

View as PDF

Submit solution

Points: 4
Time limit: 1.0s
Memory limit: 256M

Problem types
Allowed languages
Assembly, Awk, C, C++, Java, Pascal, Perl, Python, Sed, Text

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

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

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

입력 형식

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

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

1 ≤ R, C ≤ 300인 입력이 주어진다.

출력 형식

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

예제 입력 1

2 2
1 -1
-1 1

예제 출력 1

2

예제 입력 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

예제 출력 2

22

Comments

There are no comments at the moment.