data-structure-experiments/1/solution1.c

49 lines
1.1 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 d(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) {
x[k] = 1;
d(t + 1, sum + w[k], k + 1);
x[k] = 0;
d(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]);
}
d(0, 0, 0);
printf("%d", solution_count);
// printf("Total Solution Count: %d\n", solution_count);
return 0;
}