1 solutions

  • 0
    @ 2024-4-19 20:07:21
    #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