Для решения задачи разбиения на слагаемые с использованием динамического программирования в Python, мы можем использовать следующий подход:
- Создайте функцию
partition(n)
, которая будет принимать числоn
в качестве параметра и возвращать список всех возможных разбиений этого числа на слагаемые.
- Внутри функции
partition(n)
создайте пустой списокresult
, который будет содержать все разбиения числаn
.
- Создайте базовый случай: если
n
равно 0, добавьте пустой список вresult
, так как у нас нет слагаемых для суммирования.
- Используйте цикл
for
для итерации от 1 доn
, представляя каждое числоi
в качестве первого слагаемого.
- Внутри цикла, вызовите рекурсивно функцию
partition(n-i)
для проверки всех возможных разбиений оставшейся части числа (т.е.n-i
).
- Для каждого разбиения оставшейся части числа, добавьте первое слагаемое
i
к нему и добавьте результат вresult
.
- В конце цикла, верните
result
.
- Добавьте дополнительную проверку в вашу функцию
partition(n)
, чтобы она работала только для положительных целых чисел больше нуля.
Вот полный код решения задачи разбиения на слагаемые с использованием динамического программирования в Python:
def partition(n): if n <= 0: return [] result = [] if n == 0: result.append([]) for i in range(1, n+1): partitions = partition(n - i) for partition in partitions: partition.append(i) result.append(partition) return result # Пример использования n = 5 result = partition(n) print(result)
Этот код выведет все возможные разбиения числа 5 на слагаемые:
[[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 3], [1, 2, 2], [1, 4], [2, 3], [5]]
В этом примере число 5 было разбито на слагаемые [1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 3], [1, 2, 2], [1, 4], [2, 3] и [5].