【发布时间】:2019-07-29 12:05:24
【问题描述】:
给定一个大小为 N 的数组 A。数组 A 的子集的值定义为该子集中所有数字的乘积。我们必须返回数组 A %(10^9+7) 的所有可能非空子集的值的乘积。
例如数组 A {3,5}
` 值{3} = 3, 值{5} = 5, 值{3,5} = 5*3 = 15
答案 = 3*5*15 %(10^9+7)。
谁能解释一下这个问题背后的数学原理。我正在考虑通过组合来解决它以有效地解决它。
我尝试过使用蛮力,它给出了正确的答案,但它太慢了。 下一个方法是使用组合。现在我认为,如果我们取所有集合并将这些集合中的所有数字相乘,那么我们将得到正确的答案。因此,我必须找出一个数字在计算答案时出现了多少次。在示例中,5 和 3 都出现了 2 次。如果我们仔细观察,a 中的每个数字都会出现相同的次数。
【问题讨论】:
-
如果您需要数学方面的帮助,请转至the Math SE site。一旦您了解了问题背后的数学原理并且在尝试实现它时遇到了问题,那么非常欢迎您回到这里寻求代码方面的帮助。
-
我不太明白。您能否在hackerearth或codechef或某处添加原始问题的链接。谢谢
-
它正在测试中,现在链接无效。
标签: c++ algorithm math combinations