hdu 1709 The Balance(母函数)
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner cin = new Scanner(System.in);
int n;
while(cin.hasNext()) {
n = cin.nextInt();
int[] weight = new int[n];
int i, sum = 0;
for(i = 0; i < n; i++) {
weight[i] = cin.nextInt();
sum += weight[i];
}
gfun(sum, n, weight);
}
}
public static void gfun(final int n, final int cnt, final int[] num) {
int i, j, k, l;
int[] c1 = new int[n + 1];
int[] c2 = new int[n + 1];
c1[0] = 1;
for(i = 0; i < cnt; i++) {
for(j = 0; j <= n; j++) {
for(k = 0, l = 0; k + j <= n && l < 2; k += num[i]) {
// System.out.println("i=" + i + " j=" + j + " k=" + k);
c2[k + j] += c1[j];
c2[ Math.abs(k - j) ] += c1[j];
l++;
}
}
for(j = 0; j <= n; j++) {
c1[j] = c2[j];
c2[j] = 0;
}
}
// System.out.println("n=" + n);
// for(i = 0; i <= n; i++) {
// System.out.print(c1[i] + " ");
// }
int idx = 0;
for(i = 1; i <= n; i++)
if(c1[i] == 0) {
c2[idx++] = i;
}
if(idx == 0) System.out.println("0");
else {
System.out.println(idx);
for(i = 0; i < idx; i++) {
if(i == 0) System.out.print(c2[i]);
else System.out.print(" " + c2[i]);
}
System.out.println();
}
}
}
浙公网安备 33010602011771号