分析:用二进制法去枚举子集,同时判断满足条件的子集个数加1
1 #include "iostream" 2 #include "cstdio" 3 using namespace std; 4 const int maxn=16; 5 int a[maxn]; 6 int n,l,r,x; 7 int main() 8 { 9 while(cin>>n>>l>>r>>x) 10 { 11 for(int i=0;i<n;i++) 12 cin>>a[i]; 13 int cnt=0; 14 for(int i=0;i<(1<<n);i++){ 15 int sum=0; 16 int maxn=0; 17 int minn=1<<25; 18 for(int j=0;j<n;j++){ 19 if(i&(1<<j)){ 20 sum+=a[j]; 21 maxn=max(maxn,a[j]); 22 minn=min(minn,a[j]); 23 } 24 } 25 if(sum>=l&&sum<=r&&(maxn-minn)>=x) cnt++; 26 } 27 cout<<cnt<<endl; 28 } 29 }