You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

容纳新箱子所需的纸箱内箱子最小重排方案

解决思路与最小重排方案

这问题我之前做类似仓储优化需求的时候碰到过,核心就是用最少的箱子移动次数腾出足够空间放下新箱子,下面给你拆解清楚可落地的步骤和细节:

第一步:先捡最省事的情况——直接放

先遍历所有纸箱,看看有没有哪个纸箱的剩余空间直接大于等于新箱子尺寸x。如果有,直接把新箱子塞进去就行,不需要移动任何箱子,这绝对是最优解,别折腾别的。

第二步:没有直接放的?逐个纸箱当目标来算

如果所有纸箱剩余空间都不够,那就得考虑给某个纸箱腾地方了。我们逐个把每个纸箱当成「要放新箱子的目标纸箱」,计算每个目标对应的最小移动量:

2.1 算清楚目标纸箱需要腾多少空间

假设目标纸箱是A,它当前剩余空间是s_A,那需要额外腾出的空间就是:

need = x - s_A

(因为s_A < x,所以need肯定是正数)

2.2 从目标纸箱里选最少的箱子移走

这里用贪心思路最划算:优先选尺寸最大的箱子,这样能最快凑够need的空间,移动的箱子数量最少。
比如把A里的箱子按尺寸从大到小排序,挨个累加尺寸,直到总和大于等于need,这时候选出来的就是最少数量的要移动的箱子。

2.3 确认其他纸箱能装下这些要移的箱子

把除了A之外的所有纸箱的剩余空间加起来,得到total_other_space。如果total_other_space >= 要移走的箱子总尺寸,那这些箱子肯定能被分配到其他纸箱里(题目说纸箱对数量和尺寸无限制,只要总空间够就行)。

2.4 记录这个方案的移动次数

如果上面的验证通过,就记下来这个方案需要移动的箱子数量。

第三步:选最优方案

把所有可行的方案(每个目标纸箱对应的最小移动次数)拿出来比一比,选移动箱子数量最少的那个。如果有多个方案次数相同,优先选移走总尺寸最小的(后续分配更轻松)。

一些要注意的边界情况

  • 如果某个目标纸箱A的所有箱子总尺寸加起来都小于need,那就算把A里的箱子全移走,A的总容量(剩余空间+所有箱子尺寸)还是不够放x,直接跳过这个纸箱当目标。
  • 题目默认是能放下新箱子的(不然就不用谈方案了),如果碰到所有纸箱总容量加起来都小于x的情况,那确实没法放,但这种情况应该不在题目考虑范围内。

举个实际例子帮你理解

假设我们有2个纸箱:

  • 纸箱1:剩余空间5,箱内箱子[3,4,2](总容量14)
  • 纸箱2:剩余空间3,箱内箱子[1,5](总容量9)
    新箱子尺寸x=7

首先检查直接放:两个纸箱剩余空间都不够,得腾地方。

以纸箱1为目标:

需要腾出的空间need=7-5=2。从纸箱1的箱子里选最大的?4是够,但纸箱2剩余3装不下4;那选最小的2,刚好够2,纸箱2的3能装下,所以只需要移动1个箱子(尺寸2)。

以纸箱2为目标:

需要腾出的空间need=7-3=4。选纸箱2里最大的5,够4,纸箱1的剩余5能装下5,也只需要移动1个箱子(尺寸5)。

这两个方案都是最优的,随便选哪个都行。

内容的提问来源于stack exchange,提问作者Harsh Agarwal

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 09:40:33