C++ 计算链表中具有给定总和的所有子集

C++ 计算链表中具有给定总和的所有子集,c++,algorithm,linked-list,dynamic-programming,C++,Algorithm,Linked List,Dynamic Programming,给定一个数字的链表(未排序),找出求和=K的数字的总组合 我能想到的唯一解决方案是将链表转换为数组,然后通过计数子集和算法继续 有更好的方法解决这个问题吗?不需要将其重写为数组来执行计数子集和算法。但是是的,这是正确的方法。但是我不能随机访问链表中的元素,那么我该怎么做呢?为什么需要随机访问?您可以一次计算一列DP表。对于每一列,您只需要一个列表条目。我不太明白。你能解释一下吗?我知道的子集算法使用公式go[I][j]=go[I-1][j-a[I-1]]+go[I][j]维护DP表go[]中每一

给定一个数字的链表(未排序),找出求和=K的数字的总组合

我能想到的唯一解决方案是将链表转换为数组,然后通过计数子集和算法继续


有更好的方法解决这个问题吗?

不需要将其重写为数组来执行计数子集和算法。但是是的,这是正确的方法。但是我不能随机访问链表中的元素,那么我该怎么做呢?为什么需要随机访问?您可以一次计算一列DP表。对于每一列,您只需要一个列表条目。我不太明白。你能解释一下吗?我知道的子集算法使用公式go[I][j]=go[I-1][j-a[I-1]]+go[I][j]维护DP表go[]中每一行和每一列的计数。所以对于链表,我应该保持一个指向前面元素的指针,第(I-1)个元素,和一个指向当前元素的指针吗。首先计算
go[0][j]
(初始化)。然后查看第一个列表元素(
a[0]
),并计算所有
go[1][j]
。然后查看下一个列表元素(
a[1]
)并计算
go[2][j]
。继续,直到完成为止。