首页 > 其他分享 >P2404 自然数的拆分问题

P2404 自然数的拆分问题

时间:2022-12-21 15:46:13浏览次数:39  
标签:P2404 int 自然数 dfs start 拆分 printf path

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 10;

int n;
int path[N];

void dfs(int sum, int start, int k)
{
    if(sum == n)
    {
        printf("%d", path[0]);
        for(int i = 1; i < k; i ++)
        printf("+%d", path[i]);
        puts("");
    }
    
    for(int i = start; i <= n - sum; i ++)
        // if((sum + i) <= n)
        {
            if(i == n) break;
            path[k] = i;
            // k ++;
            // sum += i;
            dfs(sum + i, i, k + 1);     //这里直接把+1后的数值传入函数,避免了恢复现场
            //这里因为选的数可以重复所以start传入i即可
            //不降原则
            
            
            // sum -= i;
            // k --;
            // path[k] = 0;     //不需用恢复因为会被替换
        }
}

int main ()
{
    cin >> n;
    
    dfs(0, 1, 0);
    
    return 0;
}

标签:P2404,int,自然数,dfs,start,拆分,printf,path
From: https://www.cnblogs.com/fxc2002/p/16996384.html

相关文章