3
我一直在学习动态规划,并且我想通过打印出加起来的所有子集来进一步考虑经典的子集求和问题。我该如何去做这件事?截至目前,我知道如何根据打印true或false是否存在加起来它subset sum找到加起来的数字的所有子集
public static boolean hasSum(int [] array, int sum)
{
int len = array.length;
boolean[][] table = new boolean[sum+1][len+1];
int i;
for(i = 0; i <= len; i++)
table[0][i] = true;
for(i = 1; i <= sum; i++)
table[i][0] = false;
for(i = 1; i <= sum; i++)
{
for(int j = 1; j <= len; j++)
{
table[i][j] = table[i][j-1];
if(!table[i][j] && i >= array[j-1])
table[i][j] = table[i-array[j-1]][j-1];
}
}
return table[sum][len];
}
如果可能的一个子集,我想返回所有的子集的数组。
是啊,那是我在想什么。在表格的每个索引中,我会存储最后一个数字吗?所以,加起来说,{2,4,5,6,8,1}为10,我可以把1作为最后的10,然后是5,因为它是4,最后是9,并且那么从4增加到4,使它[4,5,1]?我希望这一点很清楚 – seanscal