个人觉得01背包解最简单,只是时间复杂度需优化。
public static void MultipleEle(int []source, int sum)
{
    List<int> tmp = new List<int>();
    MultipleEleCore(source, sum, source.Length - 1, tmp);
}
public static void MultipleEleCore(int []source, int sum, int index, List<int>ilist)
{
if (source == null || ilist == null || source.Length == 0)
    {
return;
    }
    if (index < 0)
    {
    return;
    }
    if (sum == source[index])
    {
//if (ilist.Count == 2)
{
Console.Write(source[index] + " ");
foreach (int item in ilist)
{
Console.Write(item + " ");
}
Console.WriteLine();
}
    }

    ilist.Insert(0, source[index]);
    MultipleEleCore(source, sum - source[index], index - 1, ilist);
    ilist.RemoveAt(0);
    MultipleEleCore(source, sum, index - 1, ilist);
}