#include <algorithm>
#include <iostream>
using namespace std;
const int N = 40;
const int M = 20;
long long aa[N], ss[1 << M], tt[1 << M];
int main() {
int n; long long s_; cin >> n >> s_;
for (int i = 0; i < n; i++)
cin >> aa[i];
int m = n / 2;
for (int b = 0; b < 1 << m; b++)
for (int i = 0; i < m; i++)
if (b >> i & 1 && (ss[b] += aa[i]) > s_)
break;
for (int b = 0; b < 1 << n - m; b++)
for (int i = m; i < n; i++)
if (b >> i - m & 1 && (tt[b] += aa[i]) > s_)
break;
sort(ss, ss + (1 << m));
sort(tt, tt + (1 << n - m));
long long ans = 0;
for (int l = 0, r = (1 << n - m) - 1; l < 1 << m; l++) {
while (r >= 0 && ss[l] + tt[r] > s_)
r--;
ans += r + 1;
}
cout << ans << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |