팰린드롬 행렬

짝수 크기 0/1 행렬에서 최소한의 원소를 뒤집어 적어도 R개의 행과 C개의 열이 회문이 되도록 만든다.

어려움8비트 연산완전 탐색동적 계획법아직 제출이 없습니다시간 제한2초메모리 제한512 MB

문제

N행 M열짜리 행렬 A가 있다. N과 M은 둘 다 짝수이고, 행렬의 각 원소는 0 또는 1이다.

행에는 위에서부터 1번부터 N번까지, 열에는 왼쪽에서부터 1번부터 M번까지 번호를 매긴다.

팰린드롬은 앞에서부터 읽은 결과와 뒤에서부터 읽은 결과가 같은 문자열이다. 예를 들어 "1001"과 "0111001110"은 팰린드롬이지만, "1101"과 "000001"은 팰린드롬이 아니다.

행렬의 한 행과 한 열도 0과 1을 이어 붙인 문자열로 보고 팰린드롬인지 판단한다. 아래 행렬에서는 1번 행 "0000"과 4번 열 "0110"이 팰린드롬이다.

0000
0011
0111
1110

행렬 A와 두 정수 R, C가 주어진다. 원소 하나를 바꾼다는 것은 0을 1로, 또는 1을 0으로 뒤집는 것을 뜻한다. 팰린드롬인 행이 R개 이상이고 팰린드롬인 열이 C개 이상이 되도록 만들 때, 바꿔야 하는 원소의 최소 개수를 구하는 프로그램을 작성하시오.

입력

첫째 줄에 N, M, R, C가 공백으로 구분되어 주어진다. (2N,M142 \le N, M \le 14, N과 M은 짝수, 0RN0 \le R \le N, 0CM0 \le C \le M)

둘째 줄부터 N개의 줄에 행렬 A의 각 행이 1번 행부터 순서대로 주어진다. 각 줄은 0과 1로 이루어진 길이 M의 문자열이다.

출력

팰린드롬인 행이 R개 이상, 팰린드롬인 열이 C개 이상이 되도록 만들기 위해 바꿔야 하는 원소의 최소 개수를 첫째 줄에 출력한다.