Задача о рюкзаке - Lisp

Узнай цену своей работы

Формулировка задачи:

Алгоритм решает задачу о рюкзаке, которая формулируется так: дан, упорядоченный по убыванию, массив A целых положительных чисел и некоторые Sum, необходимо найти подпоследовательности массива A, сумма элементов которых равна в точности Sum.

Решение задачи: «Задача о рюкзаке»

textual
Листинг программы
  1. (defun knapstack (w n &optional acc ac
  2.                   &aux (a (car w)) (d (cdr w)) (b (cons a ac)))
  3.   (if w
  4.       (let ((z (apply #'+ b)))
  5.         (knapstack d
  6.                    n
  7.                    (if (= z n)
  8.                        (adjoin (reverse b) acc :test #'equal)
  9.                        (knapstack d n acc ac))
  10.                    (if (< z n) b ac)))
  11.       acc))
  12.  
  13. > (knapstack '(9 8 7 6 5 4 3 2 1) 13)
  14. ((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)
  15.  (6 4 2 1) (6 4 3) (5 4 3 1))

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут