蓝桥杯 算法提高 仓库

题目:
沿着一条道路有 N 个仓库,相邻两个仓库间距离为 1 公里。假设第 i个仓库存有 Xi 个单位的货物。现在希望将货物重新分配,使得最终每个仓库内的货物量 Xi 相等。假设将 1 个单位的货物运送 1 公里的耗费为 1 个金币。请你计算出为了让各个仓库内的货物相等最少需要花费多少个金币。


思路:
1.整体思路:计算最终每个仓库的平均值pj,若低于该值,从下一个相邻仓库中取;若高于该值,将多余部分运往下一个相邻仓库。


2.思路可取性:
我们将N堆分别命名为1,2,3...i,i+1,...N,假设货物只能从右往左运输。
此时,假设i仓库里有pj-x的货物,从i仓库的角度来看,它若从i+1仓库拿来x的货物此时只花费了x*1个距离,最划算;
再者,从其他仓库来看,我们需要分类讨论。设i+1仓库中货物数量为na.
(1)当na>=pj+x时,在该处理以后,i+1仓库需要转移的货物数量减少x,通过x*1的运输量解决了2*x的“待处理货物”,此为最佳情况,实现了双赢。
(2)当na<pj+x时,在该处理以后,是否仍然为最优解?这时我们不妨讨论最极端的情况,假设i仓库为pj-x,i+1仓库的货物刚好为pj,i+2仓库为pj+x。若将i+1为i提供x货物,那么i+2就要为i提供x货物,总共花费x*1+x*1,三个仓库达到平衡;另一个选择是跳过i+1仓库,直接用i+2的货物对i进行补给,总共花费x*1+x*1,三个仓库达到平衡。我们容易发现两种方式造成的结果完全相同,此时的i+1好比一个“中转站”,对两种路径没有影响。
综上,从相邻的仓库取货物是最好的方式。可以从右边相邻的仓库取,也可以从左边相邻的仓库取,但保持方向一致。经过处理以后达到饱和的仓库,我们就不必再动它啦!
代码展示:540cf1c3f05244c0831749e40c263b48.png

 

 

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值