1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
| #include <bits/stdc++.h> #define int long long using namespace std;
int n, m;
void dfs(int l, int r, int temp, vector<int>& sum, vector<int>& arr) { if (temp > m) return; if (l == r) { sum.push_back(temp); return; } dfs(l + 1, r, temp, sum, arr); dfs(l + 1, r, temp + arr[l], sum, arr); }
void solve() { cin >> n >> m; vector<int> arr(n); for (int i = 0; i < n; i++) cin >> arr[i]; vector<int> left, right; dfs(0, n / 2, 0, left, arr); dfs(n / 2, n, 0, right, arr); sort(left.begin(), left.end()); sort(right.begin(), right.end()); int l_len = left.size(); int r_len = right.size(); int ans = 0; for (int i = 0, j = r_len - 1; i < l_len; i++) { while (j >= 0 && left[i] + right[j] > m) { j--; } if (j >= 0) ans += (j + 1); } cout << ans << endl; } signed main() { ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); int t = 1;
while (t--) { solve(); } return 0; }
|