1 solutions
-
0
#include<bits/stdc++.h> using namespace std; const int N=110; int ans[N]; bool st[N]; int n; int w[N]; int T; int cnt=0; void dfs(int u,int sum,int c) //u是当前位置,sum是和,c是已经选择的数的个数 { if(u==0) //选完了 { if(sum==T&&c>0) //和满足要求,且至少选了一个数 { cnt++; for(int i=1;i<=n;i++) //枚举所有位置 { if(st[i]==1) { cout<<w[i]<<" "; } } cout<<endl; } return ; } dfs(u-1,sum,c); //不选 st[u]=1; //选 dfs(u-1,sum+w[u],c+1); //选了以后搜索下一层 st[u]=0; //清空状态 } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>w[i]; } cin>>T; dfs(n,0,0); cout<<cnt<<endl; return 0; }
- 1
Information
- ID
- 235
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 5
- Tags
- # Submissions
- 11
- Accepted
- 8
- Uploaded By