【发布时间】:2015-12-09 20:50:04
【问题描述】:
我正在研究一个子集总和问题,它需要打印最接近该值的子集总和,如果相等则只打印该值。只有正整数
如果有多个子集总和同样接近该值,
值 = 10,subsetSum1 = 9,subsetSum2 = 11
打印小于该值的总和。
所以控制台应用程序完美地找到了相等的子集总和,但是我将如何打印出最接近该值的子集总和。
class Program
{
static int[] elements;
static int value;
static bool solution = false;
static void Main()
{
value = 10000;
Console.WriteLine("How many numbers ?");
int elementsQty = int.Parse(Console.ReadLine());
elements = new int[elementsQty];
for (int i = 0; i < elementsQty; i++)
{
elements[i] = int.Parse(Console.ReadLine());
}
Console.WriteLine("\nOutput:");
List<int> subset = new List<int>();
GetSubset(0, subset);
if (!solution)
Console.WriteLine("No match");
Console.ReadLine();
}
static void GetSubset(int index, List<int> myElements)
{
if (myElements.Sum() == value && myElements.Count > 0)
{
Console.WriteLine(" {0} = {1}", string.Join(" + ", myElements), value);
solution = true;
}
for (int i = index; i < elements.Length; i++)
{
myElements.Add(elements[i]);
GetSubset(i + 1, myElements);
myElements.RemoveAt(myElements.Count - 1);
}
}
}
【问题讨论】:
-
连续子集?数字可以是负数吗?
-
你的算法效率很低。使用动态编程,您可以更快、更轻松地解决问题。
-
您对子集中的元素感兴趣,还是最接近的总和本身就足够了?
-
只是最接近的总和
-
只有正整数@AgapwIesu
标签: c# algorithm subset-sum