我想打印出一个集合的两个子集,它们给出了相同的和,这基本上就是划分问题。我正在使用动态解决方案
partition problem
. 问题是,它只返回布尔答案(无论集合是否可以分区)。如何从动态规划中使用的2d表格中获取子集?
如何回溯用于获取元素的2D数组?
public class SubsetSum {
public boolean partition(int arr[]) {
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
if (sum % 2 != 0) {
return false;
}
sum = sum / 2;
boolean[][] T = new boolean[arr.length + 1][sum + 1];
for (int i = 0; i <= arr.length; i++) {
T[i][0] = true;
}
for (int i = 1; i <= arr.length; i++) {
for (int j = 1; j <= sum; j++) {
if (j - arr[i - 1] >= 0) {
T[i][j] = T[i - 1][j - arr[i - 1]] || T[i - 1][j];
} else {
T[i][j] = T[i-1][j];
}
}
}
return T[arr.length][sum];
}
public static void main(String args[]) {
SubsetSum ss = new SubsetSum();
int arr[] = {1, 3, 5, 5, 2, 1, 1, 6};
System.out.println(ss.partition(arr));
}
}