1 条题解

  • 0
    @ 2025-7-19 23:13:26

    直接爆搜即可。

    #include <bits/stdc++.h>
    using namespace std;
    const int p[64]={3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,173,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263,269,271,277,281,283,293};
    int o[22],n,m;
    void output()
    {
        for(int i=n;i>=1;i--)
            cout<<o[i]<<' ';
        cout<<endl;
    }
    int dfs1(int h,int l,int s)
    {
        if(s<0) return 0;
        if(l==0)
        {
            if(s==0) return 1;
            return 0;
        }
        int ans=0;
        for(int i=h+1;i<=60;i++)
            ans+=dfs1(i,l-1,s-p[i]);
        return ans;
    }
    void dfs2(int h,int l,int s)
    {
        if(s<0) return;
        if(l==0)
        {
            if(s==0) output();
            return;
        }
        for(int i=h+1;i<=60;i++)
        {
            o[l]=p[i];
            dfs2(i,l-1,s-p[i]);
        }
    }
    int main()
    {
        cin>>n>>m;
        int f=dfs1(-1,n,m);
        if(!f)
        {
            puts("No Answer.");
            return 0;
        }
        cout<<f<<endl;
        dfs2(-1,n,m);
        return 0;
    }
    
    • 1

    信息

    ID
    59
    时间
    1000ms
    内存
    256MiB
    难度
    2
    标签
    递交数
    3
    已通过
    2
    上传者