#include <cstdio> #include <cstring> #include <algorithm> using namespace std; int T, n, m, sum, v[33]; int ans, f[1005]; int main (){ scanf("%d", &T); for(int num = 1; num <= T; num++){ scanf("%d%d", &n, &m); for(int i = 1; i <= n; i++) scanf("%d", v + i); sort(v + 1, v + n + 1); if(v[1] > m){ printf("%d 0\n", num); continue; } sum = ans = 0; for(int i = 1; i < n; i++){ if(sum > m) break; memset(f, 0, sizeof(f)); f[sum] = 1; for(int k = i + 1; k <= n; k++) for(int j = m; j >= v[k] + sum; j--) f[j] = f[j] + f[j-v[k]]; int tmp = max(m - v[i] + 1, sum); for(int j = tmp; j <= m; j++) ans += f[j]; sum += v[i]; } printf ("%d %d\n", num, ans); } return 0; } |
Double click to view unformatted code.