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