首先,这不是作业问题,而是面试问题(阿里巴巴)。
最初的问题是“仓库之间的货物运输,使所有仓库的库存相同,所有这些仓库组成一个圆圈”。
我将问题抽象如下:
有一个循环整数数组,现在你需要对循环数组进行均衡(即你需要使循环数组中的每个元素都具有相同的值)。所以你必须从一个元素“移动一些价值”到另一个元素。
例如,有一个循环数组:
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”。详细给出你的算法(只解释你的算法,不需要编码)。