#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 105;
ll d[MAXN];
ll n,m;
vector<ll> k1,k2;
void dfs(ll l,ll r,ll sum,vector<ll> &k){
if(sum > m){
return;
}
if(l > r){
k.push_back(sum);
return;
}
dfs(l + 1,r,sum + d[l],k);
dfs(l + 1,r,sum, k);
}
ll tot = 0;
int main(){
scanf("%lld%lld", &n, &m);
ll mid = n / 2;
for(int i = 1;i <= n;i++){
scanf("%lld", &d[i]);
}
dfs(1,mid,0,k1);
dfs(mid + 1,n,0,k2);
sort(k1.begin(), k1.end());
sort(k2.begin(),k2.end());
for(int i = 0;i < k1.size();i++){
ll num_k1 = k1[i];
int t = 1 + lower_bound(k2.begin(), k2.end(), m - num_k1) - k2.begin();
tot += t;
}
printf("%lld", tot);
return 0;
}
为什么在这里:
for(int i = 0;i < k1.size();i++){
ll num_k1 = k1[i];
int t = 1 + lower_bound(k2.begin(), k2.end(), m - num_k1) - k2.begin();
tot += t;
}
要严格大于号才可以???