题解 | #神奇的口袋#
神奇的口袋
https://www.nowcoder.com/practice/9aaea0b82623466a8b29a9f1a00b5d35
#include <stdio.h> int visited[21]={0}; int ans=0; int n; void DFS(int *a,int i,int V){ if(i>=n){ return; } //visited[i]=1; if(V==a[i]){ ans++; //return ; //V-=a[i]; /*for(int j=0;j<n;j++){ if(!visited[j]){ DFS(a, j, V); } }*/ } if(V>a[i]){ V-=a[i]; for(int j=i+1;j<n;j++){ //if(!visited[j]){ DFS(a, j, V); //} } } if(V<a[i]){ for(int j=i+1;j<n;j++){ //if(!visited[j]){ DFS(a, j, V); //} } } } int main() { int a[21]={0}; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d",&a[i]); } for(int i=0;i<n;i++){ //if(!visited[i]) DFS(a,i,40); } printf("%d",ans); }