#include #include #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; }