特定的背包式

时间:2015-02-23 02:26:05

标签: algorithm knapsack-problem

我正在寻找一些如何处理这个特定背包问题的想法(我相信这是背包式的问题,虽然我可能会弄错)。

作为输入,我们得到一组数字,每个都可以是正数或负数 - 我们都不知道。 我们必须找到这些数字之和的最小可能绝对。 我们不必使用所有数字。我们必须按照给出数字的相同顺序进行加法(或减法),我们必须从第一个数字开始(加上或减去后面的数字)。

示例是:

4 11 5 5 => 0
because 4+11-5-5 = 0

10 3 9 4 100 => 2
because 10-3-9 = -2

在第二个例子中,我们跳过了最后两个数字 - 因为添加下一个数字不会给我们更小的绝对数字。

数量最多可达5,000 ,他们的总和不超过10,000

它们是整数

1 个答案:

答案 0 :(得分:1)

如果您要探索5000个数字的加法和减法的所有组合,则必须通过2 5000 -1≈1.4⋅10 1505 替代方案。这显然不合理。但是,由于数字之和最多为10000,我们知道所有部分和(包括减法)必须介于-10000和10000之间,因此可以有少于20000个不同的总和。如果您在处理5000个职位时只考虑不同的金额,那么您需要考虑的金额少于1亿,这对计算机而言并不是那么多。

<小时/> 示例:假设前三个数字是5,1,1。包含正好三个数字的可能总和是

5+1+1=7
5+1-1=5
5-1+1=5
5-1-1=3

在添加第四个数字之前,重要的是要认识到四个计算中只有三个唯一的结果。