【发布时间】:2013-05-11 16:29:00
【问题描述】:
我正在开发葡萄酒的运输模块,想知道是否有人可以帮我一把 - 基本上:
葡萄酒可以一箱 8、12 或 15 瓶装运,每箱都有自己的价格。该模块需要获取订单中的瓶子总数,并计算出哪种组合的价格最低。例如,在 31 瓶的订单中,最低价格为 1 箱 15 瓶和 2 箱 8 瓶(而不是 2 箱 15 瓶和 1 瓶 8 瓶,或 2 箱 12 瓶和 8 瓶之一)。目前,我有以下,几乎可以工作,但错过了一些可能的组合
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);
【问题讨论】:
-
好像有点多余。如果客户 A 购买了 27 瓶并且程序想出了如何装箱,那么您就可以为所有订购 27 瓶的未来客户提供答案。无需一遍又一遍地重新计算。我会使用电子表格或其他东西来找出最有效的方法,然后使用带有选项的数组。
-
我明白你的意思,但每个国家/地区也有自己的一套针对每个案件大小的费率,所以它有点复杂。真的不想为每个国家、每个可能的订单数量制作电子表格。当然有办法以编程方式做到这一点
-
好的,然后将查找使用瓶数和目标国家作为输入。创建查找表不应该太复杂。另一方面:是否真的需要最大限度地优化这一点以有利于客户?
-
@RST 可以中途旅行:以编程方式完成,然后缓存它。
标签: php shipping knapsack-problem