#include <bits/stdc++.h>
using namespace std;
using ll = long long;
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
ll M;
cin >> N >> M;
vector<ll> cost(N);
for(int i = 0; i < N; i++) cin >> cost[i];
int N1 = N / 2;
int N2 = N - N1;
vector<ll> leftSums;
leftSums.reserve(1 << N1);
for(int mask = 0; mask < (1 << N1); mask++){
ll sum = 0;
for(int i = 0; i < N1; i++)
if(mask & (1 << i))
sum += cost[i];
leftSums.push_back(sum);
}
sort(leftSums.begin(), leftSums.end());
ll answer = 0;
for(int mask = 0; mask < (1 << N2); mask++){
ll sum2 = 0;
for(int i = 0; i < N2; i++)
if(mask & (1 << i))
sum2 += cost[N1 + i];
ll remain = M - sum2;
if(remain < 0) continue;
int cnt = upper_bound(leftSums.begin(), leftSums.end(), remain) - leftSums.begin();
answer += cnt;
}
cout << answer << "\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... |