【问题标题】:subset sum - lisp [closed]子集总和 - lisp [关闭]
【发布时间】:2012-09-29 04:32:11
【问题描述】:

我正在尝试用 lisp 编写子集和问题。 示例:(subsetsum '(1 2 3) 5) = (2 3)(subsetsum '(1 5 3) 2) = nil

我只能使用函数

(atom x) 
(null x)
(eq x y)
(equal x y)
(numberp x)
(append x y)
(car x)
(cdr x)
(cons x y) 
(if x y z)
(cond ... ) 
(let ((x y) (u v)) z)
(let* ((x y) (u v)) z)
(defun ...)
(quote x) and its short form 'x
(list x1 x2 ...)
(print ...)
(sort L fun)

我能得到任何提示吗?

【问题讨论】:

    标签: lisp common-lisp


    【解决方案1】:

    这个问题的简化推理如下:

    1. 您有一个列表L 和一个号码S
    2. 列表的第一个元素要么是解决方案的一部分,要么不是
    3. 如果第一个是解决方案的一部分,那么您需要使用它和更简单问题的解决方案(rest L) (- S (first L))
    4. 如果它不是解决方案的一部分,那么您需要解决更简单的问题(rest L) S
    5. 在某些情况下您可以避免进行搜索...例如,如果列表为空且S 不为零,或者如果所有元素都大于零,甚至将所有元素相加,您无法联系S...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-02-05
      • 1970-01-01
      • 2021-11-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-11
      • 2015-06-18
      相关资源
      最近更新 更多