【发布时间】:2015-06-17 19:43:53
【问题描述】:
我需要从一个数字中减去列表,因此结果数字将等于或大于 0,并且结果可能是最小的。我还需要查看列表中的哪些项目被减去。
int a = 10;
List<int> list = new List<int>();
我已经尝试过了(可能是个坏主意):
for (int c = 0; c < list.Count; c++)
{
if (a > 0)
{
a = a - list.ElementAt(c);
if (a < 0)
{
a = a + list.ElementAt(c);
}
else
{
Console.Write("{0}", list.ElementAt(c));
}
}
}
但问题是它仅以一种方式减去并且没有找到最佳选择。
感谢您的任何想法。
【问题讨论】:
-
你能举个例子吗?
-
您的意思是要检索列表的子集,使其总和尽可能大,同时不大于给定的数字?
-
我认为OP希望从给定值中减去每个列表项后可能的最小结果,结果应该大于或等于0
-
因此,例如,如果列表有
{13, 12, 11, 9},并且给出的数字是10,那么结果应该是1。 -
听起来像是 0-1 背包问题的变体...背包容量是
a,整数列表是物品,我们正在挑选一组物品,试图在不增加重量的情况下最大化重量超出最大容量
标签: c# list subtraction