题解 P2404 【自然数的拆分问题】

· · 题解

这是一道DFS的题目。

这道题你仔细观察样例,可以发现:输出的数是从小到大的。 所以我们要有一个qs。下一次直接从qs开始枚举;

#include<iostream>
using namespace std;
int n,a[10];
void dfs(int he,int c,int qs){
    if(he==n){
        for(int i=1;i<=c-2;i++){
            cout<<a[i]<<'+';
        }//输出。
        cout<<a[c-1]<<endl;
        return ;
    }
    if(he>n) return;//过头返回。
    for(int i=qs;i<=n-1;i++){
        a[c]=i;//记录输出。
        dfs(he+i,c+1,i);
        a[c]=0;//改回原来的0;
    }
}
int main(){
    cin>>n;
    dfs(0,1,1);
    return 0;
}