【发布时间】:2018-10-29 00:52:54
【问题描述】:
给定一个数字n 和分区值k,这样n1+n2+..nk=n,我需要找到集合{n1,n2..,nk},这样n1*n2*...nk 是最大的。
解决此问题的一种方法是列出所有子集,然后找到具有最大乘积的子集。是否有任何有效的算法(比蛮力更好的算法)?
要查找子集,可以使用这个公式,我目前正在使用this 逻辑进行开发。
【问题讨论】:
-
k子集是什么?n1,n2,...nk是您拥有的某个子集的一部分吗?或者你可以“发明”它们? -
对它们进行排序,将最大的
k相乘。如果你必须处理负数,它会变得有点复杂,但只是一点点。 -
@amit 对不起,没有
k子集。我的意思是子集{n1,...nk}的所有可能子集。 -
我仍然对问题描述感到困惑,抱歉。您有一些数字,您需要选择其中的一个子集,它 (a) 满足某些要求并且 (b) 最大化某些目标函数。我认为要求 (a) 是子集必须总和为给定的数字,即 n——但不清楚子集是否也需要精确包含一些给定的 k 个数字。
-
@j_random_hacker 你有一个号码
n。您需要找到k数字,使得它们的总和等于n,并且这些k数字的乘积是您可以找到的所有k数字集合中最大的。