행렬분할
시간 제한1초메모리 제한1024 MB
n 곱하기 m 격자를 가로로 a번, 세로로 b번 잘라 조각을 만들 때, 가장 큰 조각 합이 최소가 되는 값을 구한다.
문제
n × m 크기의 행렬이 있다. 이 행렬을 가로로 a번, 세로로 b번 잘라 (a + 1) × (b + 1) 개의 부분으로 분할하려고 한다. 이 때, 같은 부분을 두 번 이상 자를 수는 없다. 즉, 한 개의 원소도 포함되지 않은 부분은 존재할 수 없다.
위 그림 1과 같은 6 × 7 행렬이 있을 때, 이 행렬을 가로로 2번, 세로로 3번 자르면 그림 2와 같이 된다.
분할의 '점수' 는 잘라진 각 부분의 합들 중에서 가장 큰 값으로 정의한다. 예를 들어, 그림 2와 같은 분할에서의 점수는 색칠한 부분의 합인 19이다. 최소로 분할하면 점수는 15이고, 그림은 생략한다.
행렬이 주어졌을 때 가능한 최소 점수를 구하는 프로그램을 작성하시오.
입력
첫 번째 줄에 자연수 n(2 ≤ n ≤ 20)과 m(2 ≤ m ≤ 8)의 값이 주어진다. 두 번째 줄에는 자연수 a(1 ≤ a < n), b(1 ≤ b < m) 의 값이 주어진다. 세 번째 줄부터 차례로 n개의 줄에는 행렬의 원소들이 공백으로 구분되어 주어진다. 행렬의 모든 원소들은 15 이하의 자연수이다.
출력
첫 번째 줄에 최소 점수를 출력한다.

