괴물

0과 1로 이루어진 N x M 격자에서 남아 있는 1 세포 하나를 골라 파괴했을 때 남는 모든 1 부분행렬의 개수가 최소가 되도록 하고, 그 최솟값을 구한다.

어려움8배열동적 계획법완전 탐색누적 합아직 제출이 없습니다시간 제한1초메모리 제한32 MB

문제

사람이 켄타우루스자리의 한 행성에 처음으로 내려섰다. 그 행성에는 괴물이 살고 있었다. 괴물의 방어 체계는 NNMM열 행렬 모양으로 놓인 전투 칸으로 이루어져 있다.

우리 군은 이미 몇 칸을 공격해 부쉈다. 이제 당신이 멀쩡한 칸 하나를 골라 부술 차례다.

방어 체계의 강도는 멀쩡한 칸만 담고 있는 부분행렬의 개수다. 서로 겹치는 부분행렬도 따로 센다. 부분행렬은 원래 행렬에서 다음을 지워서 얻는, 비어 있지 않은 행렬이다.

  • 첫 행부터 시작하는 연속한 행 몇 개
  • 마지막 행에서 끝나는 연속한 행 몇 개
  • 첫 열부터 시작하는 연속한 열 몇 개
  • 마지막 열에서 끝나는 연속한 열 몇 개

방어 체계의 강도가 가장 작아지도록 부술 칸을 고르고, 공격이 끝난 뒤의 강도를 구하는 프로그램을 작성하라.

입력

첫째 줄에 행의 개수 NN과 열의 개수 MM이 공백으로 구분되어 주어진다 (1N,M3001 \le N, M \le 300).

다음 NN개 줄에 길이가 MM인 이진 문자열이 한 줄에 하나씩 주어진다. 이 문자열은 행렬의 칸을 나타내고, 1은 멀쩡한 칸, 0은 우리 군이 이미 부순 칸이다.

멀쩡한 칸은 적어도 하나 있다.

출력

공격이 끝난 뒤 방어 체계의 강도를 한 줄에 출력한다.

제한

  • 1N,M3001 \le N, M \le 300
  • 행렬의 각 줄은 문자 0과 1로만 이루어진다.
  • 멀쩡한 칸이 적어도 하나 있다.