Refer to article How to divide items equally in stackoverflow, the solution was suggested in Ruby script. But I had translated into PHP script that maybe could help someone to have better idea, here is the code:
Let say the list of bags that we have
$list_of_bags = array(11, 41, 31, 15, 15, 66, 67, 34, 20, 42, 22, 25); rsort($list_of_bags);
Total weight of all bags
$weight_of_bags = array_sum($list_of_bags);
How many containers do we have at our disposal?
$number_of_containers = 4;
How much should one container weight?
$weight_per_container = $weight_of_bags / $number_of_containers;
We make an array containing an empty array for each container
$containers[] = array();
$total = 0;For each bag
foreach ($list_of_bags as $bag) { for($i=0; $i
$total = (isset($containers[$i])) ? array_sum($containers[$i]) : 0; if($total + $bag < $weight_per_container){ $containers[$i][] = $bag; break; } } }
output all containers with the number of items and total weight
foreach ($containers as $index=>$container) {
echo "container $index has ";
echo count($container);
echo " ";
echo "items and weigths: ";
echo array_sum($container);
echo " "; }
The output should be as follow:
container 0 has 3 items and weigths: 83
container 1 has 3 items and weigths: 96
container 2 has 2 items and weigths: 87
container 3 has 2 items and weigths: 76
container 4 has 2 items and weigths: 47