1 条题解

  • 0
    @ 2023-6-27 16:27:19

    这题有那么难?一看记录那么多大佬都没过

    应该是数据比较坑

    深搜拆分即可。

    #include <bits/stdc++.h>
    using namespace std;
    int n;
    int a[21];
    void dfs(int s,int id){//为确保从小到大,额外添加一个参数记录前一个数字
        if (!n){
            if (id>2){//注意:“n=n”这种方案不能输出
                for (int i=1;i<id;i++){
                    cout<<a[i]<<' ';
                }
            }
            cout<<endl;
            return;
        }
        for (int i=s;i<=n;i++){//从前一个数字开始拆
            n-=i;
            a[id]=i;
            dfs(i,id+1);
            n+=i;
        }
    }
    int main(){
        cin>>n;
        if (n==1){//但有一个很坑的地方:如果n为1,此时应该输出1而不是什么都不输出
            cout<<1;
            return 0;
        }
        dfs(1,1);
        return 0;
    }
    
    • 1

    信息

    ID
    421
    时间
    1000ms
    内存
    32MiB
    难度
    4
    标签
    递交数
    40
    已通过
    20
    上传者