2

我有以下内容:

a = [1 11; 2 16; 3 9; 4 13; 5 8; 6 14];
b = a;
n = length(a);
Sum = [];

for i=1:1:n,
   Sum = b(i,2)+b(i+1:1:n,2)

end

b =

 1    11
 2    16
 3     9
 4    13
 5     8
 6    14

对于第一次迭代,我希望在第二列中找到 19 到 25 之间的第一个值组合。

Sum =

27
20
24
19
25

由于 20 是第一个组合(第 1 行和第 3 行)——我想在开始新矩阵时删除该数据或表示这是第一个组合(即通过创建第三列将 1 放在旁边)

下一步是将仍然在矩阵中的值与第 2 行的值相加:

Sum =
29
24
30

然后将 2&5 合并。

但是,我希望不仅允许组合对,而且如果可能的话,还允许组合多行。

有什么我忽略的东西可以简化这个问题吗?

4

1 回答 1

1

我不认为你会非常简化这一点。这是背包问题的一种变体,它是 NP 难的。使用的最佳算法可能取决于输入的大小。

于 2012-11-04T04:18:05.677 回答