Вы можете использовать функцию combnk
, чтобы найти все возможные комбинации n
предметов, взятых k
за один раз. Используя пример конкурса:
values=[1,2,3,4,6];%# test vector
values=sort(values(:),'ascend');%#not needed here, but good to sort as indexing becomes easier in the end.
matchingSubsets=cell(numel(values)-1,1);%we don't need the trivial case of j=j. So, 1 less cell.
for i=2:numel(values)
combinations=combnk(values,i);
matchingSubsets{i-1}=combinations(sum(combinations(:,1:i-1),2)==combinations(:,i),:);%# this is where the sorting helps, as you now know that the last column is the max value.
end
Результат:
matchingSubsets{:}
ans =
Empty matrix: 0-by-2
ans =
2 4 6
1 3 4
1 2 3
ans =
1 2 3 6
ans =
Empty matrix: 0-by-5
Чтобы получить окончательный ответ, то есть количество подмножеств,
subsetSizes=cell2mat(cellfun(@size,matchingSubsets,'UniformOutput',false));
totalSubsets=sum(subsetSizes(:,1));
, что дает totalSubsets=4
.