我正在开发一个葡萄酒运输模块,不知道是否有人能给予我一把, -基本上就是:
葡萄酒可以装在8瓶、12瓶或15瓶的箱子里运输,每种都有自己的价格。模块需要取订单中的总瓶数,并计算出哪种箱子组合给出最低价格。例如,在31瓶的订单中,最低价格计算出1箱15瓶和2箱8瓶。(而不是15的2种情况和8的1种情况,或者12的2种情况和8的1种情况)。目前,我有以下几种,几乎可以工作,但错过了几种可能的组合
foreach ($rates as $case_size => $case_price)
{
$price = floor($total_bottles / $case_size) * $case_price;
$rem = $total_bottles % $case_size;
if($rem > 12)
{
//needs to use another case of 15
$price = $price + $rates[15];
}
elseif($rem > 8)
{
//needs an extra case of 12
$price = $price + $rates[12];
}
elseif($rem > 0)
{
//needs an extra case of 8
$price = $price + $rates[8];
}
$quotes[] = $price;
}
return min($quotes);
2条答案
按热度按时间fhity93d1#
从你的帖子中,你说最具性价比的系统不仅仅是使用最低成本的每瓶容器,而且还需要最有效地填充容器。然而,你的算法只考虑使用最少的大盒子。你需要一个算法,将完全填充每一个可能的情况。
我会这样做:使用递归程序找到最能完全填充每个用例的组合。
希望这个有用。
blpfk2vs2#
不同的方法。使用一个查找表,其中包含特定数量瓶的所有框组合。
使用另一个查找表了解每个国家每箱的不同费率
在您的功能中