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