Como encontrar todas as combinações que somam no máximo uma constante?

DeixeiP=[P1, P2, ..., Pk] estark inteiros positivos e deixeT ser um número inteiro positivo. Gostaria de gerar todas as combinações que totalizem no máximoT. Isso é,sum(x[i] * P[i] for i in 1:k) <= T Ondex[i] = 1 iffi é escolhido na combinação.

Exemplo.

DeixeiP=[1, 2, 3] eT=4. As combinações devem ser:

1
2
3
1, 2
1, 3
2, 3

Então apenas a combinação1, 2, 3 não pode estar lá porque1 + 1 + 3 = 5 > 4.

Pensei em gerar todas as combinações primeiro e depois começar a verificar a restriçãosum(x[i] * P[i] for i in 1:k) <= T. Mas essa abordagem pode consumir mais tempo do que outras abordagens inteligentes. Como podemos gerar essas combinações?

NB. Se você conhece alguma função no Python ou Matlab que possa ser usada para gerar essas combinações, você pode fornecê-la.

Obrigado.

questionAnswers(1)

yourAnswerToTheQuestion