Задача о рюкзаке - Lisp
Формулировка задачи:
Алгоритм решает задачу о рюкзаке, которая формулируется так: дан, упорядоченный по убыванию, массив A целых положительных чисел и некоторые Sum, необходимо найти подпоследовательности массива A, сумма элементов которых равна в точности Sum.
Решение задачи: «Задача о рюкзаке»
textual
Листинг программы
- (defun knapstack (w n &optional acc ac
- &aux (a (car w)) (d (cdr w)) (b (cons a ac)))
- (if w
- (let ((z (apply #'+ b)))
- (knapstack d
- n
- (if (= z n)
- (adjoin (reverse b) acc :test #'equal)
- (knapstack d n acc ac))
- (if (< z n) b ac)))
- acc))
- > (knapstack '(9 8 7 6 5 4 3 2 1) 13)
- ((9 3 1) (9 4) (8 4 1) (8 3 2) (8 5) (7 5 1) (7 4 2) (7 3 2 1) (7 6) (6 5 2)
- (6 4 2 1) (6 4 3) (5 4 3 1))
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д