首页 > 其他分享 >洛谷P2404 自然数的拆分问题——题解

洛谷P2404 自然数的拆分问题——题解

时间:2024-08-08 11:21:24浏览次数:8  
标签:P2404 洛谷 拆分 int 题解 sum 自然数 Downarrow

洛谷P2404题解


传送锚点


摸鱼环节

自然数的拆分问题

题目描述

任何一个大于 \(1\) 的自然数 \(n\),总可以拆分成若干个小于 \(n\) 的自然数之和。现在给你一个自然数 \(n\),要求你求出 \(n\) 的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。

输入格式

输入:待拆分的自然数 \(n\)。

输出格式

输出:若干数的加法式子。

样例 #1

样例输入 #1

7

样例输出 #1

1+1+1+1+1+1+1
1+1+1+1+1+2
1+1+1+1+3
1+1+1+2+2
1+1+1+4
1+1+2+3
1+1+5
1+2+2+2
1+2+4
1+3+3
1+6
2+2+3
2+5
3+4

提示

数据保证,\(2\leq n\le 8\)。


窝又来水题解啦作为不会搜索的蒟蒻,训练搜索能力以达到骗分学会拿部分分是很有必要的,于是来切一道橙题。


正片开始

  1. 考虑搜索要用到的状态,首先需要有一个\(x\)记录当前选择的数的大小,然后需要传\(sum\)记录当前的总和,最后用一个\(a[cnt]\)记录每次选择的数就ok了。
  2. 接下来直接搜索就拿下了。

code:

void dfs(int x,int sum,int cnt)
{
    if(x==n) return;
    if(sum==n)
    {
        cout<<a[0];
        for(int i=1;i<cnt;i++) cout<<"+"<<a[i];
        cout<<endl;
        return;
    }
    for(int i=x;i<=n-sum;i++)
    {
        a[cnt]=i;
        dfs(i,sum+i,cnt+1);
    }
    return;
}

完整代码

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e6+5;
int n,a[N];
void dfs(int x,int sum,int cnt)
{
    if(x==n) return;
    if(sum==n)
    {
        cout<<a[0];
        for(int i=1;i<cnt;i++) cout<<"+"<<a[i];
        cout<<endl;
        return;
    }
    for(int i=x;i<=n-sum;i++)
    {
        a[cnt]=i;
        dfs(i,sum+i,cnt+1);
    }
    return;
}
int main()
{
    cin>>n;
    dfs(1,0,0);
    return 0;
}

完结收工!!!!!

个人主页

看完点赞,养成习惯

\(\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\Downarrow\)

标签:P2404,洛谷,拆分,int,题解,sum,自然数,Downarrow
From: https://www.cnblogs.com/qc0817/p/18348546

相关文章

  • 洛谷 P1125 [NOIP2008 提高组] 笨小猴
    [NOIP2008提高组]笨小猴题目描述笨小猴的词汇量很小,所以每次做英语选择题的时候都很头疼。但是他找到了一种方法,经试验证明,用这种方法去选择选项的时候选对的几率非常大!这种方法的具体描述如下:假设maxn......
  • 【题解】Solution Set - NOIP2024集训Day2 线段树
    【题解】SolutionSet-NOIP2024集训Day2线段树https://www.becoder.com.cn/contest/5431「CF1149C」TreeGenerator™结论:对于括号序列的一个子段,删去所有的匹配括号之后,剩下的不匹配的括号,按顺序构成树上的一条路径。Why?从括号序列的构造出发。每次(相当于开始遍历......
  • ABC365F Takahashi on Grid 题解
    ##题目大意有一个网格图,对于$i=1,2,\dotsn$,第$i$列的$[L_i,U_i]$上的单元格是可到达的,形如下面这张图。![](https://img.atcoder.jp/abc365/4d07a40c98eda33ee86b773e564681c7.png)图中对于$i=1,2,\dots7$,$[L_i,U_i]$分别为:```15331311142435```......
  • excel总结遗留问题解决
    excel遗留问题解决powerquery这是powerbi中的一部分,excel2016以后集成了powerquery,用于做数据清洗。一般过程是数据导入powerquery,经过powerquery清洗,然后上载到excel的表,数据透视表等以共使用。插入之定义列,然后使用公式生成新的列数据?函数配合条件选择使用......
  • loj6669 Nauuo and Binary Tree 题解
    https://loj.ac/p/6669赛时做法先\(n-1\)次问出深度逐层考虑。slv(vector<int>a,vector<int>b)表示在点集\(a\)中寻找\(b\)中点的父亲,询问\(a[0]\)和\(b\)中所有点的距离分治下去复杂度不会算,印象中过了树剖oiwiki二叉树:最多只有一个轻儿子类似「即时战略」......
  • 洛谷P1064 金明的预算方案——题解
    洛谷P1064题解传送锚点摸鱼环节[NOIP2006提高组]金明的预算方案题目描述金明今天很开心,家里购置的新房就要领钥匙了,新房里有一间金明自己专用的很宽敞的房间。更让他高兴的是,妈妈昨天对他说:“你的房间需要购买哪些物品,怎么布置,你说了算,只要不超过\(n\)元钱就行”。今天......
  • 历年CSP-J初赛真题解析 | 2013年CSP-J初赛阅读程序(23-26)
    学习C++从娃娃抓起!记录下CSP-J备考学习过程中的题目,记录每一个瞬间。附上汇总贴:历年CSP-J初赛真题解析|汇总_热爱编程的通信人的博客-CSDN博客#include<iostream>usingnamespacestd;intmain(){inta,b;cin>>a>>b;cout<<a<<"+"<<b<<......
  • 洛谷P8869 莲子的软件工程学之警钟长鸣
    洛谷P8869题解传送锚点摸鱼环节[传智杯#5初赛]A-莲子的软件工程学题目背景在宇宙射线的轰击下,莲子电脑里的一些她自己预定义的函数被损坏了。对于一名理科生来说,各种软件在学习和研究中是非常重要的。为了尽快恢复她电脑上的软件的正常使用,她需要尽快地重新编写这么一......
  • 洛谷P3842 线段——题解
    洛谷P3842题解传送锚点摸鱼环节[TJOI2007]线段题目描述在一个\(n\timesn\)的平面上,在每一行中有一条线段,第\(i\)行的线段的左端点是\((i,L_{i})\),右端点是\((i,R_{i})\)。你从\((1,1)\)点出发,要求沿途走过所有的线段,最终到达\((n,n)\)点,且所走的路程长度要尽......
  • 洛谷P1786 帮贡排序
    6.帮贡排序题目背景在absi2011的帮派里,死号偏多。现在absi2011和帮主等人联合决定,要清除一些死号,加进一些新号,同时还要鼓励帮贡多的人,对帮派进行一番休整。题目描述目前帮派内共最多有一位帮主,两位副帮主,两位护法,四位长老,七位堂主,二十五名精英,帮众若干。现在absi2011要......