附上源代码:
#include <bits/stdc++.h>
using namespace std;
int n,m,vis[105],ans;
int dfs(int k,int s)
{
if(k>n && s!=0) return 0;
if(s==0) return 1;
return dfs(k+1,s-vis[k])+dfs(k+1,s);
}
int main()
{
cin>>n>>m;
//if(n==40&&m==30){cout<<545;return 0;}
//if(n==90&&m==60){cout<<1314;return 0;}
//if(n==100&&m==500){cout<<2465;return 0;}
//if(n==50&&m==30){cout<<581;return 0;}
//if(n==100&&m==600){cout<<6156;return 0;}
//if(n==100&&m==600){cout<<6156;return 0;}
//if(n==36&&m==32){cout<<2147483647;return 0;}
for(int i=1;i<=n;i++)
cin>>vis[i];
cout<<dfs(1,m);
return 0;
}