Pošto tražiš samo algoritam, evo jedna mogućnost u Python-u.
Code:
from copy import copy
lista = [] # pomocna lista
kombinacije = [] # lista sa kombinacijama
def insert(lista):
""" Proverava da li se ovaj *skup* brojeva koji prosledjujemo
funkciji u obliku liste *lista* vec nalazi u listi *kombinacije* """
for i in kombinacije:
if set(i) == set(lista): # set pretvara liste u skupovni tip
return
kombinacije.append(copy(lista))
def komb(sum, tren, skup):
"""
sum - suma koju trazimo
tren - trenutna suma
skup - skup brojeva koji dolazi u obzir za sumiranje
"""
for i in skup:
lista.append(i)
tren += i
if tren == sum:
insert(lista)
lista.pop()
return
elif tren > sum:
lista.pop()
return
else:
komb(sum, tren, skup)
tren -= i
lista.pop()
if __name__ == '__main__':
sum = 20
skup = [1, 3, 4, 5, 10, 11, 15]
komb(sum, 0, skup)
print kombinacije