Хитрость в том, чтобы сделать это (несколько) эффективно, состоит в том, чтобы создать наборы элементов, которые имеют одинаковый вес, используя первые k элементов.
Начните с пустого набора в k = 0, затем создайте свои комбинации дляk с использованием комбинаций из k-1.Если у вас не может быть отрицательных весов, вы можете обрезать комбинации с общим весом больше W.
Вот как это выглядит на вашем примере:
comb [k, w] - наборэлементов с общим весом w с использованием первых k элементов.
Для наборов используются фигурные скобки.
S + e - набор наборов, созданный путем добавления элемента e к каждому члену S.
comb[0,0]={}
comb[1,0]={comb[0,0]}
comb[1,2]={comb[0,0]+'A'}
comb[2,0]={comb[1,0]}
comb[2,1]={comb[1,0]+'B'}
comb[2,2]={comb[1,2]}
comb[2,3]={comb[1,2]'B'}
comb[3,0]={comb[2,0]}
comb[3,1]={comb[2,1]}
comb[3,2]={comb[2,2]}
comb[3,3]={comb[2,3],comb[2,0]+'C'}
comb[3,4]={comb[2,3]+'C'}
comb[4,0]={comb[3,0]}
comb[4,1]={comb[3,1]}
comb[4,2]={comb[3,2],comb[3,0]+'D'}
comb[4,3]={comb[3,3],comb[3,1]+'D'}
comb[4,4]={comb[3,4],comb[3,2]+'D'}
comb[5,0]={comb[4,0]}
comb[5,1]={comb[4,1],comb[4,0]+'E'}
comb[5,2]={comb[4,2],comb[4,1]+'E'}
comb[5,3]={comb[4,3],comb[4,2]+'E'}
comb[5,4]={comb[4,4],comb[4,3]+'E'}
Тогда ответом является гребень [5,4], который упрощается до:
{
{{'B'}+'C'},
{{'A'}+'D'},
{
{{'A'}+'B'},
{'C'},
{'B'}+'D'
}+'E'
}
Предоставление всех комбинаций.