피자 상자

각 칸에 서로 다른 높이의 상자 더미가 있을 때, 각 행과 각 열의 최댓값을 그대로 유지하면서 없앨 수 있는 상자의 최대 개수를 구한다.

보통4배열그리디구현수학면접 대비아직 제출이 없습니다시간 제한1초메모리 제한512 MB

문제

크기가 모두 같은 피자 상자가 있다. 상자는 nnmm열 격자의 칸마다 하나씩 쌓아 올려 더미를 이루고, 각 칸의 더미 높이는 서로 모두 다르다. 격자를 정면에서 보면 각 열에서 가장 높은 더미의 높이가 보이고, 옆에서 보면 각 행에서 가장 높은 더미의 높이가 보인다.

정면도와 측면도를 그대로 유지하면서 상자를 최대 몇 개까지 치울 수 있는지 구하자. 그림 I.1(a)는 높이 격자이고, 그림 I.1(b)는 그 격자의 두 시점이다. 그림 I.2는 그림 I.1(a)에서 상자를 최대한 치우고 남은 격자다. 그림에 적힌 숫자는 그 칸에 쌓인 상자의 개수다.

그림 I.1. (a) 높이 격자와 (b) 그에 대응하는 두 시점.

그림 I.2. 상자를 치우고 남은 높이 격자.

원래의 정면도와 측면도를 바꾸지 않으면서 치울 수 있는 상자의 최대 개수를 구하는 프로그램을 작성하라.

입력

첫째 줄에 격자의 행 수 nn과 열 수 mm이 공백으로 구분되어 주어진다 (1n,m10001 \le n, m \le 1000).

다음 nn개의 줄에는 각 행의 높이가 mm개씩 주어진다. 모든 높이는 00 이상 10000000001\,000\,000\,000 이하의 정수이고, 격자에 있는 n×mn \times m개의 높이는 서로 모두 다르다.

출력

원래의 정면도와 측면도를 바꾸지 않으면서 치울 수 있는 상자의 최대 개수를 한 줄에 출력한다.