题目:
来源于Mathwork上的Cody,Problem 43. Subset Sum,
我主要使用nchoosek函数生成各种组合,然后借助sum函数寻找与n相等的组合。
代码如下,
function ind = subset_sum(v,n)
index=1:1:length(v);
ind=[];
if sum(v==n)>0
ind=index(v==n);
end
if isempty(ind)
for i=length(v):-1:2
r=nchoosek(index,i);
v_r=v(r);
sum_v_r=sum(v_r,2);
if sum(sum_v_r==n)>0
ind=r(sum_v_r==n,:);
break;
end
end
end
end
测试,
>> v = [-7, -3, -2, 8, 5];
n = 0;
subset_sum(v,n)
ans =
2 3 5