首页 > 其他分享 >信奥赛CSP-J复赛集训(dfs专题)(12):洛谷P2404:自然数的拆分问题

信奥赛CSP-J复赛集训(dfs专题)(12):洛谷P2404:自然数的拆分问题

时间:2024-12-07 15:03:49浏览次数:5  
标签:输出 P2404 洛谷 int 信奥赛 自然数 dfs 拆分 sum

信奥赛CSP-J复赛集训(dfs专题-刷题题单及题解)(12):洛谷P2404:自然数的拆分问题

在这里插入图片描述

题目描述

任何一个大于 1 1 1 的自然数 n n n,总可以拆分成若干个小于 n n n 的自然数之和。现在给你一个自然数 n n n,要求你求出 n 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 ≤ n ≤ 8 2\leq n\le 8 2≤n≤8。

AC代码(100分)

#include<bits/stdc++.h>
using namespace std;
/*深搜思路: 
	输出的数是从小到大的
	设置一个参数记录本次填的数x,下一次直接从x开始枚举	
*/ 
int n,a[10]; 
void print(int k){
	for(int i=1;i<=k-2;i++){
		cout<<a[i]<<"+";
	}
	cout<<a[k-1]<<endl;
}
void dfs(int sum,int x,int k){//当前和sum,第k个位置从x开始枚举填写 
	if(sum==n){
		print(k);
		return;
	}
	if(sum>n) return;
	for(int i=x;i<=n-1;i++){//关键点:从x开始枚举 
		a[k]=i;//填数 
		dfs(sum+i,i,k+1); 
	}
}
int main(){
	cin>>n;
	dfs(0,1,1);
	
	return 0;
} 

文末彩蛋:

点击王老师青少年编程主页有更多精彩内容

标签:输出,P2404,洛谷,int,信奥赛,自然数,dfs,拆分,sum
From: https://blog.csdn.net/weixin_66461496/article/details/144309139

相关文章

  • 洛谷 P1359 租用游艇 C语言 记忆化搜索
    题目:https://www.luogu.com.cn/problem/P1359题目描述长江游艇俱乐部在长江上设置了 n 个游艇出租站 1,2,⋯ ,n。游客可在这些游艇出租站租用游艇,并在下游的任何一个游艇出租站归还游艇。游艇出租站 i 到游艇出租站 j 之间的租金为r(i,j)(1≤i<j≤n)。试设计一个算......
  • 洛谷 P1553 数字反转(升级版) C语言 stl
    题目:https://www.luogu.com.cn/problem/P1553题目背景以下为原题面,仅供参考:给定一个数,请将该数各个位上数字反转得到一个新数。这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数。整数反转是将所有数位对调;小数反转是把整数部分的数反转,再将小数部分......
  • 洛谷P1305 新二叉树(c嘎嘎)
    题目链接:P1305新二叉树-洛谷|计算机科学教育新生态题目难度:普及刷题心得:做了几道这种类型的题都不用建树就可以解决,基本上还是利用好树的结构,例如这道题求前序序列(根左右)是可以用递归来求的。无非就是先从根出发,递归遍历左子树,递归遍历右子树,遇到 *直接返回就行了......
  • 洛谷解题日记14||前缀和,差分与离散化
    #include<iostream>#include<vector>#include<algorithm>usingnamespacestd;intmain(){intn;cin>>n;//读取区间的个数nvector<pair<int,int>>intervals(n);//存储区间的起点和终点,使用pair类型//读......
  • 洛谷题单指南-线段树-P1637 三元上升子序列
    原题链接:https://www.luogu.com.cn/problem/P1637题意解读:统计序列a[1]~a[n]中三元上升子序列的个数,三元上升子序列是指对于1<=i<j<k<=n有a[i]<a[j]<a[k],(a[i],a[j],a[k])成为一组上升子序列。解题思路:1、先思考一下暴力,通过三重循环枚举i,j,k找到所有i<j<k时符合a[i]<a[j]<a[k]......
  • 洛谷 P11362 [NOIP 2024] 遗失的赋值
    题目传送门如果没有其他限制,那么一个二元限制可能出现的方案数为\(v^2\)。考虑\(\{x_n\}\)的一个区间,设其中能放\(t\)个二元限制,它的左右端点有一元限制,求这\(t\)个限制的方案数。设这个数为\(f(t)\)。如果第一个二元限制的\(a\)与左端点\(i\)处的\(x\)值相同,那......
  • 洛谷 P1651 塔(DP)
    题目传送门https://www.luogu.com.cn/problem/P1651解题思路设  表示前  个积木,两塔高度差为 (第一个比第二个高多少),的最大高度。易得:首先,不选当前的积木:其次,选当前积木,将它拼到第一个塔上:最后,选当前积木,将它拼到第二个塔上:由于,第二维可能为负数,所以,我们可以以 (数......
  • GESP一级必刷题 分支结构 P5713 洛谷团队系统
    【深基3.例5】洛谷团队系统题目描述在洛谷上使用团队系统非常方便的添加自己的题目。如果在自己的电脑上配置题目和测试数据,每题需要花费时间555分钟;而在洛谷团队中上......
  • 洛谷题单指南-线段树-P6492 [COCI2010-2011#6] STEP
    原题链接:https://www.luogu.com.cn/problem/P6492题意解读:一个序列,初始L,可以指定一个位置修改,L修改成R,R修改成L,可以令L=0,R=1,然后每次修改后输出序列最长不连续0、1(0/1交替出现)的长度。解题思路:序列支持单点修改(0->1,1->0),区间查询(最长不连续0、1长度),因此可以采用线段树,不需要懒标......
  • 洛谷二刷P4715 【深基16.例1】淘汰赛(c嘎嘎)
    题目链接:P4715【深基16.例1】淘汰赛-洛谷|计算机科学教育新生态题目难度:普及 刷题心得:本题是我二刷,之前第一次刷是在洛谷线性表那个题单,当时印象深刻第 一篇题解是用的树来做,当时我不屑一顾(觉得花里胡哨),现在我开始刷树的题目着字分析,第一次学习到线性树的用法现......