自然数的拆分问题(lgP2404)

dfs。又调了一个小时,窝果然菜

需要传递的变量分别为目前搜索的数字;目前所有选中数字的和;目前所选数字个数。

见注释。

#include<bits/stdc++.h>
using namespace std;
int n,ans[1001];//题面似乎没给数据范围。。。
void dfs (int a,int sum,int num)//a目前搜索的数字;sum目前所有选中数字的和;num目前所选数字个数
{
    if (sum > n) return;//表示这种方案不满足题意
    else if (sum == n)//满足题意,输出答案
    {
        for(int i=1;i<num;i++)
        {
            cout<<ans[i];
            if(i!=num-1) cout<<"+";
        }
        cout<<endl;
    }
    for(int i = a;i < n;i ++)//一定不要写小于等于,因为这个问题调了很久qwq
    {
        ans[num] = i;
        dfs(i,sum + i,num + 1);//继续往下搜索
    }
    return;
}
int main()
{
    cin >> n;
    dfs(1,0,1);
    return 0;
}
原文地址:https://www.cnblogs.com/ying-xue/p/14017799.html