查找具有给定平均值的所有子集

时间:2017-06-14 19:07:17

标签: c# subset-sum

给定一组数字:{1,4,5,3,2}和平均值= 2.5,找到平均值为2.5的所有子集。例如,答案将是{1,4},{1,4,3,2},{3,2}

我想在C#

中接近多项式时间来解决这个问题

1 个答案:

答案 0 :(得分:0)

不是作业,它是个人项目的一部分。以下是我试过的代码。

这里a =平均值,w = {1,2,3,4,5},m =目标平均值。

public void SumOfSubset(double a, int k)
        {
            if (k > 4) return;
            x[k] = 1;
            var count = x.Where(i => i == 1).Count();
            if (((a * (count - 1)) + w[k]) / count == m)
            {
                for (int i = 0; i <= k; i++)
                {
                    if (x[i] == 1)
                    {
                        Console.Write(w[i] + ",");
                    }
                }
                Console.WriteLine();

            }


                if (((a * (count - 1)) + w[k] + w[k + 1]) / (count + 1) <= m)
                {
                    SumOfSubset(((a * (count - 1)) + w[k]) / count, k + 1);
                }
                if (((a * (count - 1)) + w[k + 1]) / count <= m)
                {
                    x[k] = 0;
                    SumOfSubset(a, k + 1);
                }


        }