题解报告: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;
}


相关文章
|
3月前
|
人工智能 算法 测试技术
【动态规划】【二分查找】C++算法 466 统计重复个数
【动态规划】【二分查找】C++算法 466 统计重复个数
|
7月前
|
算法
代码随想录Day21 回溯 LeetCodeT216 组合总和III LeetCode T17电话号码的字母总和
代码随想录Day21 回溯 LeetCodeT216 组合总和III LeetCode T17电话号码的字母总和
31 0
|
4月前
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
代码随想录Day30 贪心05 LeetCode T435无重叠区间 T763划分字母区间 T56 合并区间
30 0
|
4月前
|
监控
代码随想录Day31 贪心06 T738 单调递增的数字 T968监控二叉树
代码随想录Day31 贪心06 T738 单调递增的数字 T968监控二叉树
23 0
|
10月前
回溯与搜索 五 数的划分(NOIP2001)
回溯与搜索 五 数的划分(NOIP2001)
|
11月前
|
定位技术
DFS:迷宫解的方案数
DFS:迷宫解的方案数
|
12月前
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
leetcode剑指offer53–n-1中缺失的数字(二分//or等差数列)
|
存储 人工智能 算法
区间分组的解法
区间分组的解法
代码随想录刷题|LeetCode 435. 无重叠区间 763.划分字母区间 56. 合并区间
代码随想录刷题|LeetCode 435. 无重叠区间 763.划分字母区间 56. 合并区间
代码随想录刷题|LeetCode 435. 无重叠区间 763.划分字母区间 56. 合并区间
|
测试技术
输出全排列 (20 分)(dfs模板题)
输出全排列 (20 分)(dfs模板题)
85 0