代码块
这是一个假设的情况是星期五晚上,你已经邀请了平时的高尔夫哥们参加自己喜欢的爱好:打高尔夫球的代码。但是,由于这是一项耗费人心的工作,因此您需要为团队筹集一些大脑食物,以便您可以尽可能多地打高尔夫球。
现在,每个人最喜欢的小吃是鸡块,但是有一个问题:没有一包能满足每个人的需求的零食。因此,由于您已经处于打高尔夫球的状态,因此您决定创建一个程序,该程序可以弄清楚您必须购买哪些包才能满足每个人的金块需求。
鸡块包装的大小无处不在,并且取决于您在世界上居住的地方,标准大小也有所变化。但是,最近的[服务金块的地方]库存以下尺寸的金块包装:
4, 6, 9, 10, 20, 40
现在,您可能会注意到无法订购某些组合的矿块。例如,11掘金是不可能的,因为没有组合是11完全相等的。但是,您可以43通过获取1包20,1包10,1包9和1包来制作4,
20 + 10 + 9 + 4 = 43 (597)
597每个项在哪里平方并加在一起(提示:最佳解决方案将其作为最大值)。当然,还有其他制造方法43,但是如您所知,每包的金块越多,每个金块的价格越便宜。因此,理想情况下,您要购买数量最少的包装,并以最大的数量购买,以最大程度地降低成本。
任务
您应该创建一个程序或函数,该程序或函数采用与每个人的要求相对应的整数列表。然后,您应该计算并打印出最具成本效益的α订单,以购买鸡肉块。成本效益最高的α阶是每个数量的平方和最高的组合。如果是绝对没有办法买掘金完美,你必须打印一个falsy值,如0,False,Impossible!,或无论是在您的语言版本。
I / O示例:
[2 7 12 4 15 3] => [20 10 9 4]
1, 1, 2, 1 => False
6 5 5 5 5 5 9 => 40
[6, 4, 9] => 9 10
1 => 0
199 => 40, 40, 40, 40, 20, 10, 9
2 => Impossible!
这是前400个理想解决方案的列表。请注意,这些格式并未按照我的期望进行格式化,每个tuple都以形式出现(N lots of M)。
规则
- 没有标准漏洞。
- 不使用内置函数来完成全部或大部分任务,例如
FrobeniusSolve在Mathematica中。
α-为了举例说明,您也可以通过做43来做4 + 6 + 6 + 9 + 9 + 9 = 43 (319),但这不是最佳选择,因此输出不正确,因为平方和小于我在引言中提到的组合。本质上,较高的平方和=较低的成本=最具成本效益的。