Math 如何在不重复的情况下找到所有可能子集中元素乘法的总和?

Math 如何在不重复的情况下找到所有可能子集中元素乘法的总和?,math,sum,multiplication,Math,Sum,Multiplication,我在一次竞赛中遇到过这个问题,我试图用以下代码回答它(在Java中,但您可以使用任何受支持的语言,竞赛网站链接在底部): static long calcmultissus(int[]arr) { int sum=0,n=arr.length; 对于(int i=0;iNaive方法: 创建一个静态变量sum=0 查找数组的所有子集(在您的示例中称为powerset): 计算每套产品的数量 将其添加到sum 更好的解决方案是: 可能存在的副本 static long calcMultisSums

我在一次竞赛中遇到过这个问题,我试图用以下代码回答它(在Java中,但您可以使用任何受支持的语言,竞赛网站链接在底部):

static long calcmultissus(int[]arr)
{
int sum=0,n=arr.length;
对于(int i=0;iNaive方法:

  • 创建一个静态变量
    sum=0
    查找数组的所有子集(在您的示例中称为powerset):
  • 计算每套产品的数量
  • 将其添加到
    sum
  • 更好的解决方案是:

    可能存在的副本
    static long calcMultisSums(int[] arr)
    {
        int sum=0, n=arr.length;
        for(int i=0;i<n;i++)
            sum+=arr[i];
    
        int mult=0;
    
       for(int i=0;i<n;i++){
           for(int b=i+1;b<n;b++)
               mult+=arr[b]*arr[i];
       }
       int mult2=0;
        if(n>2){
            mult2=1;
            for(int value : arr) {
                mult2 *= value;
            }      
        }
    
    
        return mult+sum+mult2;
    }