题解报告:P2404 自然数的拆分问题(dfs+回溯)

简介: 算法

飞机票

8.png

思路:题目要求是拆分后的序列中的数字从小到大排序,要求输出字典序较小的序列。所以我在for循环的最小值就用上一位的值,然后搜索回溯,

#include<bits/stdc++.>
using namespace std;
const int maxn=10;
int n;
int ans[maxn];
void dfs(int sum,int cnt)
{
    int i;
    if(sum==n){
        for(i=0;i<cnt-1;i++){
            cout<<ans[i]<<"+";
        }
        cout<<ans[i]<<endl;
        return ;
    }
    for(i=max(ans[cnt-1],1);i<n;i++){
        if(sum+i<=n){
             ans[cnt]=i;
             sum+=i;
            dfs(sum,cnt+1);
            sum-=i;
        }
    }
}
int main()
{
    int i,j,d;
    cin>>n;
    dfs(0,0);
    return 0;
}


相关文章
|
6月前
|
人工智能 算法 测试技术
【动态规划】【二分查找】C++算法 466 统计重复个数
【动态规划】【二分查找】C++算法 466 统计重复个数
|
6月前
|
C++ Python
leetcode-56:合并区间
leetcode-56:合并区间
60 0
|
3月前
|
算法 C++
P2404 自然数的拆分问题(DFS)
这篇文章提供了解决自然数拆分问题的深度优先搜索(DFS)算法,包括C++实现代码,用于输出一个自然数拆分为小于等于自身且按字典序排列的所有可能序列。
|
1月前
acwing 836 合并区间
acwing 836 合并区间
13 1
acwing 836 合并区间
|
1月前
|
C++
Leetcode第56题(合并区间)
这篇文章介绍了LeetCode第56题“合并区间”的解题方法,通过排序和贪心策略合并重叠区间,并提供了C++的代码实现。
18 0
Leetcode第56题(合并区间)
|
3月前
|
算法
LeetCode第56题合并区间
LeetCode第56题"合并区间"的解题方法,通过排序区间并判断重叠后进行合并,有效解决了区间合并问题。
LeetCode第56题合并区间
|
6月前
力扣56.合并区间
力扣56.合并区间
|
6月前
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
51 0
|
存储
图解LeetCode——56. 合并区间
图解LeetCode——56. 合并区间
128 1