此题初看会有一种用DP的错觉.但细细想一想,其实最优策略是可以手工制定出来的,这就是贪心法.
首先,我们应该有这样的直觉,对任意一台洗衣机,最优的转移策略肯定不会出现"反反复复"的情况.即经过充分的优化调度后,衣物的转移应该是单向的.比如,最终A总计向左边净值转移了x件衣物(x可以是正数或负数),那么说明A和左边的衣物交换最少就是x.同理,最终A总计向右边净值转移了y件衣物(y可以是正数或负数),那么说明A和右边的衣物交换最优就是y件.
显然,对于任何一台洗衣机,上述的x和y都是很容易计算的.比如我们知道了x,以及最终平衡时每台洗衣机拥有的avg,那么我们就可以知道了y=machines[i]-avg-x.因此,只要我们知道了第一台洗衣机的x,那么一路顺下来所有洗衣机的x和y都可以计算.
对于任意一台洗衣机,有了x和y之后,我们是否能知道这台洗衣机需要多少move来实现这些转移呢?关键就在这里.如果x和y都是正数,向两边都是净输出,那么这个洗衣机需要x+y的move.除此之外的话,说明什么呢?应该想到,x与y可以有overlap.因为一边有净输入,一边有净输出,那么输入和输出可以同时进行.如果两边都是净输入,那么根据题意这也是可以同时进行的,需要的move就是abs(x)和abs(y)中较大的就一个就行.
最终的答案是所有洗衣机里需要的move数最多的那个.