漂流问题(背包变体)
我的第一个难题是,很高兴收到改进建议! 场景是;您是一家激流漂流公司的经理。每天早晨,您都会收到一份预订清单,您必须将它们分类为木筏装载。用您选择的语言编写适合您的程序或函数。 每个木筏最多可容纳一个n客户,并且每个预订的n人数是1至2 (含)之间的一组。必须遵守以下规则; 不得拆分任何组。如果他们一起订票,他们必须都在同一排。 筏子的数量必须最小化。 在符合前两个规则的前提下,组必须在木筏之间尽可能平均地分布。 输入。 数字n(您可能会认为这是一个正整数),以及所有预订的大小。如果您的语言支持,则可以是数组,列表或类似的数据结构。所有这些都是介于1和之间的正整数n。预订的顺序没有定义,也不重要。 输出。 预订编号列表,分为筏负载。必须明确指出分组,例如; 列表或数组数组。 每个筏的逗号分隔列表。每个筏之间的换行符。 如何实施第三条规则由您决定,但这可能涉及找到平均木筏占用率,并尽可能减少其偏离。这是一些测试用例。 n Bookings Output 6 [2,5] [5],[2] 4 [1,1,1,1,1] [1,1,1],[1,1] 6 [2,3,2] [2,2],[3] 6 [2,3,2,3] [2,3],[2,3] 6 [2,3,2,3,2] [2,2,2],[3,3] 12 [10,8,6,4,2] [10],[8,2],[6,4] 6 [4,4,4] [4],[4],[4] 12 [12,7,6,6] [12],[7],[6,6] 适用标准规则,以最短的代码为准。玩得开心! 编辑; 建议为第三条规则尽可能平等地定义的方法。 一旦r确定了木筏的数量(服从第二条规则),则a可以通过对预订进行求和并除以来计算平均占用率r。对于每个筏,可以使用找出与平均占用率的偏差d(x) = abs(n(x)-a),其中n(x)每个筏中的人数是和1 <= x <= …