其实感觉对这道题的深度优先搜索还是不太完全理解。
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
//习题9.2 神奇的口袋
int counts=0;
void dfs(int a[],int n,int sum,int pos){
if (sum==40){
counts++;
return;
}
for(int i=pos;i<n;i++)dfs(a,n,sum+a[i],i+1);
}
int main(){
int n;
scanf("%d",&n);
int a[n];
for(int i=0;i<n;i++){
cin>>a[i];
}
sort(a,a+n);
dfs(a,n,0,0);
cout<<counts<<endl;
return 0;
}