Particionando uma lista de números inteiros para minimizar a diferença de suas somas

Dada uma lista de números inteirosl, como posso particioná-lo em 2 listasa eb de tal modo qued(a,b) = abs(sum(a) - sum(b)) é mínimo. Sei que o problema é NP-completo, então estou procurando um algoritmo de tempo pseudo-polinomial, ou seja,O(c*n) Ondec = sum(l map abs). Eu olheiWikipedia mas o algoritmo existe para particioná-lo em metades exatas, que é um caso especial do que estou procurando ...

EDIT: Para esclarecer, estou procurando as partições exatasa eb e não apenas a diferença mínima resultanted(a, b)

Para generalizar, o que é um algoritmo de tempo pseudo-polinomial para particionar uma lista den números emk gruposg1, g2 ...gk de tal modo que(max(S) - min(S)).abs é o menor possível, ondeS = [sum(g1), sum(g2), ... sum(gk)]

questionAnswers(3)

yourAnswerToTheQuestion