有一个数组A [1 ........ N]。如何找到数组的最大子集,使得子集的任何两个不同元素的乘积不是完美的立方体。 N的上限是100000。
示例:
For A = 1 2 4 8. Answer will be {1, 2} or {1, 4} or {8, 2} 0r {8, 4}.
1 and 8
无法在解决方案中聚集在一起。
同样2 and 4
。
我的方法。
N*N*2^N
)。N*N
)。请帮忙。
答案 0 :(得分:2)
考虑每个数字的因子分解如下:
A[i] = x^3.y^2.z
即。我们首先找到分割的最大立方体(并称之为x),然后是最大的正方形(并称之为y),然后调用留在z上的任何东西。
当且仅当Y = z且Z = y时,A[i]
与另一个A[j]=X^3.Y^2.Z
的乘积将是一个立方体。
因此,如果您考虑具有相同y ^ 2.z值的数字组,则这些组形成对,其中对于每对,您不能从两个链接组中获取元素。
显然,最好的情况是从每对中最大的组中取出所有元素。
有一种特殊情况,其中y ^ 2.z等于1.在这种情况下,组中的任何数字都是完美的立方体,不能与同一组中的另一个数字配对。因此,您可以从完美的立方体集中添加一个数字。
假设我们的数组是(表示为素数分解):
A[0] = 2^3
A[1] = 3^3
A[2] = 2^2.3.5^3
A[3] = 2^2.3.7^3
A[4] = 2.3^2.13^3
我们首先将这些分组:
Value 1 = Group A (2^3, 3^3)
Value 2^2.3 = Group B (2^2.3.5^3, 2^2.3.7^3)
Value 2.3^2 = Group C (2.3^2.13^3)
A组与自身配对,而B组与C组配对。
因此,我们可以从A组和整个B组中取一个元素,在最后一个子集中总共有3个元素。
答案 1 :(得分:0)
你可以将其表述为最大的集团问题。
创建一个图形,每个数字作为顶点,如果它们的产品不是立方体,则连接两个顶点。
现在找到图表中最大的集团。见https://en.wikipedia.org/wiki/Clique_problem#Finding_maximum_cliques_in_arbitrary_graphs