其实感觉对这道题的深度优先搜索还是不太完全理解。

#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;
}