我正在尝试编写一个执行以下操作的c#程序:
所以,我有一个用户定义对象的列表,比如说Person。比如说,Person对象有两个字段,Name和age。例如,
MyList
- Person1: John, 10
- Person2: Mary, 25
- Person3: Mike, 35
- Person4: Ann, 20
- Person5: Joe, 5
我想从列表中找到一个与我传入的数字相等的集合。如果我在上面的列表和50中传递,我想将Person2,Person4,Person5作为列表返回。
答案 0 :(得分:0)
不幸的是,它是NP-Complete,因此没有已知的多项式解决方案。
但是,它确实有一个pseudo-polynomial solution, using Dyanamic Programming,它正在使用下一个递归函数:
f(i,0) = true
f(0,k) = false (k != 0)
f(i,k) = f(i-1,k) or f(i-1,k-weight[i])
如果此类解决方案存在,则使用f(n,W)
运行会返回true,否则返回false。
动态编程解决方案填满表格,在表格填满后,您需要从table[n][W]
“回溯”您的步骤,以便找到应该包含在集合中的项目。
有关从表中获取实际元素的更多信息,请参阅this thread