Случайная мысль пришла мне в голову (конечно, когда я делила плитку шоколада!). Мне было интересно, есть ли общий алгоритм для решения этой проблемы.
Проблема выглядит так:
Информация
1. У вас есть плитка шоколада с маленькими квадратами, расположенными в прямоугольной матрице
2. В комнате n человек
Проблема
Напишите алгоритм, который выводит оптимальную конфигурацию (pxq), при которой панель может быть разделена поровну между n, n-1, n-2...., 2, 1
людьми при следующих ограничениях:
1. A малые квадраты (единичный квадрат) нельзя разрезать на более мелкие части
2. Все разрывы должны выполняться полностью по одной оси
3. Общее количество разрывов не может быть больше n (это сделано для предотвращения неэффективных решений, таких как попытка разбить весь столбец на мелкие части и разделить на маленькие части)
4. p или q не могут быть равны 1. yx указал в одном из ответов, что проблема легко разрешима, если одна сторона имеет 1 столбик. Это, однако, не лучшее решение для реальных ситуаций - что и было целью решить эту проблему :)
Пример
Для n = 4 оптимальное конфигурация 4 x 3.
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
| | | | |
~~~~ ~~~~ ~~~~ ~~~~
Эту конфигурацию можно разделить на:
4 человека с 3 перерывами по вертикальным осям
3 человека с 2 перерывами по горизонтальным осям
2 человека с 1 перерывом прямо посередине
< br> Другие эмпирические решения: (n, p, q) = (1, 1, 1); (2, 2, 1); (3, 3, 2); (4, 4, 3); (5, 5, 12); (6, 6, 10) OR (6, 5, 12)
Уточнения
Разрыв определяется как разрез по одной оси для подмножества стержня, если применимо. Чтобы лучше проиллюстрировать это, предположим, что у вас есть плитка шоколада 2 x 2, подобная этой:
~~~~ ~~~~
| | |
~~~~ ~~~~
| | |
~~~~ ~~~~
Принято считать, что нужно сделать 2 разрыва (перпендикулярные оси посередине - вниз и поперек), чтобы разделить эту планку на 4 части. Однако в реальном мире (если бы это была плитка шоколада) вы бы сначала сломали ее пополам, а затем снова сломали бы каждую половину по отдельности. Всего получается 3 перерыва - 1 перерыв на всю полосу и 2 перерыва на 2 разных подгруппах шкалы.
Я не мог найти решение нигде в Интернете - если кто-то считает, что это не вопрос, связанный с программированием, или решение уже существует, не стесняйтесь закрыть вопрос =)