我相信这更像是一个算法问题,但我也想在 C++ 中做到这一点。让我用一个例子来说明这个问题。
假设我有 N 个对象(不是编程对象),每个对象的权重不同。我有两辆车可以载它们。这些车辆足够大,可以承载所有物品。这两辆车有自己的里程数和油箱中的不同油位。而且里程数取决于它所承载的重量。
目标是尽可能地把这 N 个物体带到远处。所以我需要在两辆车之间以某种方式分配N个对象。请注意,我不需要将它们带到“相同”的距离,而是尽可能远。例如,我希望两辆车跑 5 公里和 6 公里,而不是一辆跑 2 公里,另一辆车跑 7 公里。
我想不出一个理论上的封闭式计算来确定每辆车要装载哪些重量。因为请记住,我需要携带所有 N 个对象,这是一个固定值。
所以据我所知,我需要尝试所有的组合。
有人可以建议一种有效的算法来尝试所有组合吗?
例如,我将有以下内容:
int weights[5] = {1,4,2,7,5}; // can be more values than 5
float vehicelONEMileage(int totalWeight);
float vehicleTWOMileage(int totalWeight);
我怎样才能有效地尝试使用这两个函数的所有 weights[] 组合?
可以将两个函数假定为线性函数。即两个里程函数的返回值是具有(不同)负斜率和(不同)偏移的线性函数。
所以我需要找到的是这样的:
MAX(MIN(vehicleONEMileage(x), vehicleTWOMileage(sum(weights) - x)));
谢谢你。