Si el problema es tan pequeño, puedes utilizar la búsqueda por fuerza bruta: listar todos los rectángulos contenidos en el área, enumerar todos los conjuntos de rectángulos, mantener los que dividen el área, y seleccionar el mejor.
Para reducir el número de candidatos puede organizar conjuntos de rectángulos no superpuestos en un árbol (la raíz es el conjunto vacío, cada nivel añade un rectángulo las particiones están entre las hojas). En su implementación, no es necesario almacenar el árbol, sólo tienes que explorarlo.
Si el problema es mayor, en lugar de todos los rectángulos puedes utilizar los rectángulos máximos, sus intersecciones y diferencias.
Si una solución aproximada es aceptable se puede empezar con una partición en rectángulos (por ejemplo, todos los $1\times1$ rectángulos), hacer crecer esos rectángulos tanto como sea posible (en direcciones aleatorias), elimínalos o córtalos (al azar) para tener una partición. Iterar muchas veces y quedarse con la mejor solución. Creo que un algoritmo similar se utiliza para simplificar las expresiones booleanas (pero se permiten solapamientos).