¿Cómo encontrar todas las combinaciones que suman como máximo una constante?
DejarP=[P1, P2, ..., Pk]
serk
enteros positivos y dejarT
ser un número entero positivo Me gustaría generar todas las combinaciones que sumen como máximoT
. Es decir,sum(x[i] * P[i] for i in 1:k) <= T
dóndex[i] = 1
iffi
Se elige en la combinación.
Ejemplo.
DejarP=[1, 2, 3]
yT=4
. Las combinaciones deben ser:
1
2
3
1, 2
1, 3
2, 3
Entonces solo la combinación1, 2, 3
no puede estar allí porque1 + 1 + 3 = 5 > 4
.
Pensé en generar todas las combinaciones primero y luego comenzar a verificar la restricciónsum(x[i] * P[i] for i in 1:k) <= T
. Pero este enfoque podría llevar más tiempo que otros enfoques inteligentes. ¿Cómo podemos generar tales combinaciones?
NÓTESE BIEN. Si conoce alguna función en Python o Matlab que pueda usarse para generar tales combinaciones, puede proporcionarla.
Gracias.