我有一个数组 B :
B=[1 2 3; 10 20 30 ; 100 200 300 ; 1000 2000 3000]
这样
B =
1 2 3
10 20 30
100 200 300
1000 2000 3000
我正在使用以下代码来查找低于某个值(约束)的这些变量之间的可能组合——在这种情况下为 2000:
A=[123; 323; 12 ; 421]
SA=sum(A)
V=cell(length(B),1);
n=1;
for k = 1:length(B)
for idx = nchoosek(1:length(B), k)'
B_subset = B(idx);
if (SA + sum(B_subset) <= 2000)
V(n)={B_subset(:)}; %store them in a cell
n=n+1;
end
end
end
但是我未能按照我想要的方式将它们组合在下面。
客观的 :
找出 B 中要与 SA 相加的可能组合,使它们的总和小于 2000 ?
约束 1:
- 一次只能使用数组中每一行的一个值
B
。
例如,这是不可接受的:[1 2 20] [2 20 30]
这是正确的:[1 20 100] [3 200 3000]
约束 2: - 答案应仅存储在单元格 V 中的一列中(如上面代码中初始化的那样)。
该单元格的输出应与我当前的输出相似:
V =
[ 100]
[ 300]
[ 200]
[2x1 double]
[2x1 double]
[2x1 double]
[3x1 double]