我试图找到全部一组n个数字的总和为m的子集。例如,如果我有集合(10,20,30,40,40,50,80)
和m = 90
,子集是(10,80)
,(20,30,40)
和(40,50)
。我有代码,会发现小的情况下这样使用类似...子集合 - 二维动态规划
M[i, j] = max(M[i − 1, j], M[i − 1, j − A[i])
然后使用回溯...
if (M[n][m]!=0)
{
for (i = n; i >= 1; i --)
if (M[i - 1][j]!=M[i][j])
{
printf ("Use item %d = %d\n", i, A[i]);
j -= A[i];
}
}
但是当我尝试更大的测试用例,它不会返回所有的子集。任何帮助将非常感激。
我们怎么帮你,如果你不”告诉我们你正在使用的代码?请不要显示您项目中的所有代码,只需显示相关位。 – NickLH
首先:数字是否都是正数(或至少是非负数)?其次,你的例子包含40次两次,是一个错字还是多个元素允许的? –
所有元素都是正数,并且允许多个元素。 – user1013032