我一直在学习动态规划,我想通过打印出所有加起来等于某个数字的子集来进一步了解经典的子集和问题。我应该怎么做呢?目前为止,我只知道如何根据是否存在一个加起来等于这个数字的子集来打印真或假。
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];
}
如果可能的话,我想返回所有子集的数组。