Массив элементов может быть отсортирован с уменьшением размеров.
Поскольку необходимо заполнить всю область, ее можно заполнить сверху вниз, слева направо.
Для каждого элемента области возможные формы должны быть повторены; для 6: (1, 6), (6, 1), (2, 3), (3, 2): нахождение пар факторов.
рекурсия с бэк-трекингом; рекурсия выглядит так:
if (free space == 0)
print success with placements
++solution count
return;
for every candidate:
if (candidate fits here)
place candidate here
recurse (candidates without candidate)
remove candidate here
Я не буду портить красивую загадку, которая стоит перед вами.