Обратитесь к статье Как разделить предметы поровну в stackoverflow решение было предложено в сценарии Ruby. Но я перевел на PHP скрипт, который, возможно, мог бы помочь кому-то, чтобы иметь лучшую идею, вот код:
Допустим, список сумок, которые у нас есть
$ list_of_bags = array (11, 41, 31, 15, 15, 66, 67, 34, 20, 42, 22, 25);
rsort ($ list_of_bags);Общий вес всех сумок
$ weight_of_bags = array_sum ($ list_of_bags);
Сколько контейнеров у нас в распоряжении?
$ number_of_containers = 4;
Сколько должен весить один контейнер?
$ weight_per_container = $ weight_of_bags / $ number_of_containers;
Мы создаем массив, содержащий пустой массив для каждого контейнера
$ container [] = array ();
$ total = 0;За каждую сумку
foreach ($ list_of_bags как $ bag) {
для ($ i = 0; $ i$total = (isset($containers[$i])) ? array_sum($containers[$i]) : 0; if($total + $bag < $weight_per_container){ $containers[$i][] = $bag; break; } } }
вывести все контейнеры с количеством предметов и общим весом
foreach ($ Containers как $ index => $ container) {
эхо «контейнер
$ index has «;
эхо-счет ($ контейнер);
эхо «»;
echo «предметы и весы»;
echo array_sum ($ container);
эхо «»;
}
Вывод должен быть следующим:
Контейнер 0 имеет 3 предмета и вес: 83
Контейнер 1 имеет 3 предмета и вес: 96
Контейнер 2 имеет 2 предмета и вес: 87
Контейнер 3 имеет 2 единицы веса: 76
Контейнер 4 имеет 2 предмета и весит: 47
Задача ещё не решена.
Других решений пока нет …