Странная, но практичная оптимизация упаковки в бункер

Я пытаюсь написать приложение, которое генерирует рисунок для разделенной панели.

У меня есть N ячеек (2D прямоугольники) (N <= 40) Для каждой ячейки существует минимальная высота (minHeight [i]) и минимальная ширина (minWidth [i]). Сама панель также имеет ограничение MAXIMUM_HEIGHT.

Эти N ячеек должны быть расположены в сетке по столбцам так, чтобы вышеуказанные ограничения выполнялись для каждой ячейки.

Кроме того, ширина каждого столбца определяется максимальным значением minWidths каждого блока в этом столбце.

Кроме того, высота каждого столбца должна быть одинаковой. Это решает высоту панели

Мы можем добавить запасные ячейки в пустое пространство, оставленное в любом столбце, или мы можем увеличить высоту / ширину любой ячейки сверх указанного минимума. Однако мы не можем вращать ни одну из ячеек.

OBJECTIVE: TO MINIMIZE TOTAL PANEL WIDTH.

В настоящее время я реализовал это, просто игнорируя ширину ячеек в моей оптимизации. Я просто выбираю ячейку с наибольшим значением minHeight и пытаюсь разместить ее на своей панели. Однако это не гарантирует оптимального решения.

Могу ли я стать лучше, чем это?

EDIT 1: MAXIMUM_HEIGHT панели = 2100 мм, диапазон минимальной ширины (от 350 до 800 мм), диапазон минимальной высоты (от 225 до 2100 мм)

РЕДАКТИРОВАТЬ 2: ЗАДАЧА ЗАДАЧИ: МИНИМИЗИРОВАТЬ ШИРИНУ ПАНЕЛИ (не области панели) .I '

Ответы на вопрос(3)

Ваш ответ на вопрос