Algorithm 求给定数组的所有子集之和,该子集的最大大小不超过k

Algorithm 求给定数组的所有子集之和,该子集的最大大小不超过k,algorithm,data-structures,Algorithm,Data Structures,给定和数组A=[1,2,3]和k=2,子集将为:[1]、[2]、[3]、[1,2]、[1,3]、[2,3],其和将为18 约束条件:| A |=1000000,A[i]

给定和数组A=[1,2,3]和k=2,子集将为:[1]、[2]、[3]、[1,2]、[1,3]、[2,3],其和将为18

约束条件:| A |=1000000,A[i]<1000000

注:ans必须以模10^9+7的形式返回

我已经用大小为n(数组大小)的帕斯卡三角形的最后一行解出了它。对于上面的例子,它是121。当k=2时,我将1的前两项相加,即1+2=3。我将数组的每一项乘以这个因子,得到3*1+3*2+3*3=18。这是因为每个数字在所有子集中都出现了很多次


有更好的方法解决这个问题吗?

注意,第一个二项式系数的和是一个二项式系数,这里c(3,2)=c(3,1)。关于如何有效地计算二项式系数mod P,这里已经有好几篇文章了。此外,除了这个细节,在我看来,你的方法是好的。是的,每个术语出现
(0,n-1)+(1,n-1)+(2,n-1)+…+(k-1,n-1)
次;所以你必须有效地找到二项式系数的和