首先,这不是作业问题,而是面试问题(阿里巴巴)。
最初的问题是“仓库之间的货物运输,使所有仓库的库存相同,所有这些仓库组成一个圆圈”。
我将问题抽象如下:
有一个循环整数数组,现在你需要对循环数组进行均衡(即你需要使循环数组中的每个元素都具有相同的值)。所以你必须从一个元素“移动一些价值”到另一个元素。
例如,有一个循环数组:
c_array = {1, 2, 3}, c_array[0] == 1, c_array[1] == 2, c_array[2] == 3.
要均衡圆形数组,您必须“移动”1从c_array[2]到c_array[0]。
有一些规则:
- 移动必须在相邻元素之间;
- 移动量必须是整数;
- 从一个元素转移
k到另一个元素的成本k;
另一个例子:
c_array = {1, 2, 7, 6}, c_array[0] == 1, c_array[1] == 2, c_array[2] == 7, c_array[3] == 6.
解决方案是:
从2到 c_array[3], c_array[0]成本2;
从3到 c_array[2], c_array[1]成本3;
从1到 c_array[1], c_array[0]成本1;
总成本为6。
问题是找到成本最低的解决方案。如果没有有效解,则输出“NO”。详细给出你的算法(只解释你的算法,不需要编码)。