您有一堆沉重的箱子,并且希望将它们堆叠在尽可能少的堆叠中。问题是您不能在一个盒子中堆放更多的盒子,因此不能容纳更多的盒子,因此较重的盒子必须放在盒子的底部。
挑战
输入:整箱重量列表,以千克为单位。
输出:描述盒子堆栈的列表列表。这必须使用最少数量的堆栈作为输入。要成为有效的堆栈,堆栈中每个盒子的重量必须大于或等于其上方所有盒子的重量之和。
有效堆栈的示例
(按从下到上的顺序)
- [3]
- [1,1]
- [3,2,1]
- [4,2,1,1]
- [27、17、6、3、1]
- [33,32,1]
- [999,888,99,11,1]
无效堆栈的示例
(按从下到上的顺序)
- [1,2]
- [3,3,3]
- [5、5、1]
- [999、888、777]
- [4、3、2]
- [4321、3000、1234、321]
示例测试用例
1个
IN: [1, 2, 3, 4, 5, 6, 9, 12]
OUT: [[12, 6, 3, 2, 1], [9, 5, 4]]
2
IN: [87, 432, 9999, 1234, 3030]
OUT: [[9999, 3030, 1234, 432, 87]]
3
IN: [1, 5, 3, 1, 4, 2, 1, 6, 1, 7, 2, 3]
OUT: [[6, 3, 2, 1], [7, 4, 2, 1], [5, 3, 1, 1]]
4
IN: [8, 5, 8, 8, 1, 2]
OUT: [[8, 8], [8, 5, 2, 1]]
规则与假设
- 适用标准I / O规则和禁止的漏洞
- 使用任何方便的I / O格式
- 只要您保持一致,就可以从上到下或从下到上描述堆栈。
- 堆栈的顺序(而不是这些堆栈中的框)无关紧要。
- 您也可以将输入框作为预排序列表。顺序对于输入不是特别重要,只要排序本身不能解决一般问题即可。
- 如果有多个最佳配置的堆栈,则可以输出其中任何一个
- 您可以假设至少有一个盒子,所有盒子的重量至少为1公斤
- 您必须支撑的重量至少为9,999 kg。
- 最少必须支持总共9,999个盒子。
- 重量相同的盒子是无法区分的,因此无需注释在哪里使用了哪个盒子。
打高尔夫球快乐!祝好运!
2
我们可以按重量排序吗?(上升或下降)
—
Arnauld
“您最多必须支持多达9,999个盒子。” 在这里如何解释“支持”?这是否仅表示该程序应该能够接受这种大小的输入,还是意味着该程序实际上应在合理的时间内提供答案?如果是后者,则应该提供更大的测试用例。
—
乔尔
建议的测试用例:
—
Hiatsu
[8, 8, 8, 5, 1]
->[[8, 8], [8, 5, 1]]
甚至更好:
—
Hiatsu
[8, 5, 8, 8, 1, 2]
->[[8, 8], [8, 5, 2, 1]]
@Arnauld,因为否则会给答案添加无趣的排序代码,我要说是,您可以按排序的顺序输入输入。
—
Beefster