아직 만들고 있는 페이지입니다.

이 페이지는 아직 만드는 중입니다. 보이는 내용은 바뀔 수 있습니다.

하나보다는 둘이 낫다

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

요약
0, 1, 2로 이루어진 N x M 격자에서 1을 포함하지 않는 두 직사각형으로 모든 2를 덮을 때, 덮인 칸 수의 최솟값을 구합니다.
난이도

보통10점 중 7점

유형
완전 탐색, 누적 합, 행렬, 그리디
정답자
아직 제출이 없습니다

문제

N×MN \times M 행렬이 주어지며, 각 원소는 00, 11, 22 중 하나이다. 값이 22인 원소가 적어도 하나 존재한다.

다음 조건을 만족하도록 축에 평행한 두 직사각형을 고른다(두 직사각형은 서로 겹쳐도 되고, 완전히 같아도 된다).

  • 값이 22인 모든 칸은 두 직사각형 중 적어도 하나에 포함된다.
  • 두 직사각형 중 어느 것도 값이 11인 칸을 포함하지 않는다(값이 00인 칸은 직사각형 안에 있어도 된다).

직사각형의 넓이는 그 직사각형이 덮는 칸의 개수이다. 조건을 만족하는 모든 방법 중에서, 두 직사각형이 함께 덮는 영역의 넓이(두 직사각형에 모두 포함되는 칸은 한 번만 센다)를 최소로 하라.

그 최소 넓이를 구하라. 조건을 만족하는 두 직사각형이 존재하지 않으면 그 사실을 출력한다.

입력

첫째 줄에 두 정수 NN과 MM이 주어진다. 다음 NN개의 줄에는 각각 MM개의 정수가 주어지며, 이는 행렬을 위에서부터 한 행씩 나타낸다. 모든 값은 00, 11, 22 중 하나이다.

출력

두 직사각형이 함께 덮는 최소 넓이를 정수 하나로 출력한다. 조건을 만족하는 두 직사각형이 존재하지 않으면 −1-1을 출력한다.

제한

  • 1≤N,M≤501 \le N, M \le 50
  • 행렬의 모든 원소는 00, 11, 22 중 하나이다.
  • 값이 22인 원소가 적어도 하나 존재한다.

예제4

  1. 예제 1

    입력
    3 4
    1 2 1 0
    2 0 2 2
    1 2 1 0
    
    예상 출력
    6
    
  2. 예제 2

    입력
    1 1
    2
    
    예상 출력
    1
    
  3. 예제 3

    입력
    5 3
    2 1 0
    1 1 1
    0 1 2
    1 1 1
    2 1 0
    
    예상 출력
    -1
    
  4. 예제 4

    입력
    3 3
    2 0 0
    0 0 0
    0 0 2
    
    예상 출력
    2