Объекты нельзя поворачивать, да? Если бы они не были ограничены в размерах, было бы просто.
Непонятно как выбирать размеры размещаемых элементов и как организовать итерации. Надеюсь увидеть более научный подход :)
Лень копаться в коде на проверку эквивалентности решений, но —
Рассматриваем все возможные конфигурации данного количества объектов с указанными ограничениями. Для каждой легко вычислется соотношение сторон наименьшего описанного прямоугольника, и, соответственно, площадь, занимаемая ею при максимальном растяжении внутри большого прямоугольника. Потом выбирается самая-самая. Тут наверняка можно оптимизировать и не перебирать все — или, может, даже сразу её находить. Ограничение размеров объектов метода не меняет, но на возможности вычислить необходимую конфигурацию может, кажется с первого взгляда, сказаться нехорошо.
Под конфигурациями имею в виду вот такие штучки:
Код:
X XX XXX XXXX XXXXXXX
X XX XXX XXX
X XX X
X X
X
X
X
Перечислять их нетрудно, и вычислять их параметры тоже, потому стоит попробовать найти требуемые сразу на бумаге.