만드는 중입니다

아직 만드는 중이라 바뀔 수 있습니다

피자 상자

면접 대비

시간 제한1초메모리 제한512 MB

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

보통10점 중 4점

유형
배열, 그리디, 구현, 수학
정답자
아직 제출이 없습니다

문제

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

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

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

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

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

입력

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

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

출력

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

예제3

  1. 예제 1

    입력
    4 4
    1 2 4 6
    16 9 13 11
    5 10 8 15
    12 14 7 3
    
    예상 출력
    72
    
  2. 예제 2

    입력
    3 5
    1 11 25 20 23
    17 2 16 21 15
    10 3 12 24 22
    
    예상 출력
    101
    
  3. 예제 3

    입력
    3 3
    1 2 3
    4 5 6
    7 8 9
    
    예상 출력
    12