您的任务是建立一种算法(程序或函数),以优化将水果从传送带包装到袋子中并发送给零售商的过程,从而优化最大数量的袋子。
每个袋子必须至少具有一定的重量,但是任何多余的重量都会损失利润,因为该重量可用于填充另一个袋子。您的装袋机始终将n
水果排在前列,并且只能选择将这些n
水果中的任何一种添加到正在处理的(单个)袋子中。它不能超出n
队列中的第一个元素。该程序始终准确知道袋子中已经有多少重量。
可视化的另一种方法是在传送带n
的末端装上一个尺寸大小的装载区,在该传送带上必须在新水果到达之前从中取出水果。丢弃所有剩余的水果和末尾的未装满袋子。
输入项
- 队列中水果的权重列表/数组(正整数)
- 袋子的最小总重量(正整数)
- 前瞻
n
(正整数)
输出量
您的算法应以所有适合您和您的语言的方式为所有袋子返回水果中的重量,无论是标准输入还是返回值或其他。您应该能够在计算机上在一分钟内运行该程序并计算分数。
例
Total weight 1000, lookahead of 3 and fruit queue:
[171,163,172,196,156,175,162,176,155,182,189,142,161,160,152,162,174,172,191,185]
One possible output (indented to show how the lookahead affects the bagging):
[171,163,172, 156,175, 176]
[162, 155,182,189, 161,160]
[152,162,174,172,191,185]
计分
我将为您准备的10000个橙子批次在六次运行中测试您的算法,并且前瞻性从2到7(包括两端)。您应将它们包装在重量至少为1000个的袋子中。橘子的平均重量为170,标准偏差为13(如果有帮助的话)。
您的得分将是六次跑步的总和。最高分获胜。不允许出现标准漏洞。