У меня есть список номеров. Теперь, если я установлю фиксированное значение V, возможно ли для Python разделить список на несколько групп так, чтобы сумма каждой группы была не меньше V (получить эти группы как можно больше)?
Пример: если список равен [1,2,3,4,5], а V равно 6, то результат должен быть [[1,5], [2,3,4]]. Разделение группы означает, что вы не можете использовать один и тот же оригинальный элемент более одного раза.
Нет ограничений на количество элементов, которое может содержать каждый подсписок, а также номера не в порядке (могут быть некоторые случайные числа). Может ли кто-нибудь помочь мне? Пока что мое решение состоит в суммировании всех комбинаций и сравнении сумм. Но я уверен, что должно быть более эффективное решение. Спасибо!
Мое решение: сначала я пользуюсь этим, а остальное делаю мысленно, поэтому дальнейшее развитие не стоит.
import itertools
import math
stuff = list(range(10))
v = 6
for L in range(0, len(stuff)+1):
for subset in itertools.combinations(stuff, L):
if math.fsum(subset) > v:
print(subset,math.fsum(subset))