data-structure-experiments/1/main.c

50 lines
1.0 KiB
C

#include <stdio.h>
#include <stdlib.h>
#define MAX_N 100
int T;
int n;
int w[MAX_N];
int x[MAX_N];
int solution_count = 0;
void dfs(int t, int sum, int k) {
if (sum == T) {
solution_count++;
if (solution_count > 50)
return;
int *re = malloc(sizeof(int) * k);
int j = 0;
for (int i = 0; i < k; i++) {
if (x[i]) {
re[j++] = w[i];
}
}
for (int i = 0; i < j; i++) {
printf("%d ", re[i]);
}
printf("\n");
} else if (sum < T && k < n) {
// 剪枝
if (sum + w[k] <= T) {
x[k] = 1;
dfs(t + 1, sum + w[k], k + 1);
}
x[k] = 0;
dfs(t + 1, sum, k + 1);
}
}
int main() {
freopen("data.in", "r", stdin);
// freopen("data.out", "w", stdout);
scanf("%d", &T);
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &w[i]);
}
dfs(0, 0, 0);
printf("Total Solution Count: %d\n", solution_count);
return 0;
}