Я думаю, что это все еще дубликат, может быть, я ошибаюсь.
лятьP=[P1, P2, ..., Pk]
бытьk
натуральные числа и пустьT
быть положительным целым числом. Я хотел бы генерировать все комбинации, которые в сумме не болееT
, Это,sum(x[i] * P[i] for i in 1:k) <= T
гдеx[i] = 1
тогда и только тогдаi
выбран в комбинации.
Пример.
ПозволятьP=[1, 2, 3]
а такжеT=4
, Комбинации должны быть:
1
2
3
1, 2
1, 3
2, 3
Так что только комбинация1, 2, 3
не может быть там, потому что1 + 1 + 3 = 5 > 4
.
Сначала я подумал о генерации всех комбинаций, а затем начал проверять ограничениеsum(x[i] * P[i] for i in 1:k) <= T
, Но этот подход может занять больше времени, чем другие умные подходы. Как мы можем генерировать такие комбинации?
NB. Если вам известна какая-либо функция в Python или Matlab, которую можно использовать для генерации таких комбинаций, вы можете предоставить ее.
Спасибо.