深度优先搜索——自然数的拆分问题(洛谷 P2404)
题目选自洛谷P2404
题目显然是用DFS来做,需要注意的是 结果是从小到大的,所以同一种答案不同位置都只算一种,所以在dfs的时候 我们每次从上一次的值开始搜索即可。
用数组p[9]的1-8下标位置代表放置的数字,因为最多就只能有8个1组成8嘛,
dfs(a,b,x) 用来表示第a个数,从b开始尝试,总和为x;
因为我们满足条件的时候 进入到了最新的a,实际上只保存了a-1个数
而又只有最后一个 即p[a-1]后面不加"+"输出,所以先输出下标 1—a-2;
题目描述
任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和。现在给你一个自然数n,要求你求出n的拆分成一些数字的和。每个拆分后的序列中的数字从小到大排序。然后你需要输出这些序列,其中字典序小的序列需要优先输出。
输入格式
输入:待拆分的自然数n。
输出格式
输出:若干数的加法式子。
输入输出样例
输入 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
说明/提示
用回溯做。。。。
n≤8
解题代码:
#include<stdio.h>
#include<iostream>
#include<math.h>
using namespace std;
int p[9],n;
void dfs(int a,int b,int x){//a为个数 b为开始的数 x为总和if(x==n){if(x==n)for(int i=1;i<=a-2;i++)cout<<p[i]<<"+";cout<<p[a-1]<<endl;;return;}if(x > n) return;for(int i=b;i<n;i++){p[a] = i;dfs(a+1,i,x+i);p[a] = 0;}
}
int main(){cin>>n;dfs(1,1,0);return 0;
}
深度优先搜索——自然数的拆分问题(洛谷 P2404)相关推荐
- 【寒假每日一题】洛谷 P2404 自然数的拆分问题
题目链接:P2404 自然数的拆分问题 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) 题目描述 任何一个大于 1 的自然数 n,总可以拆分成若干个小于 n 的自然数之和.现在给你一 ...
- 洛谷P2404 自然数的拆分问题(回溯)
洛谷P2404 自然数的拆分问题(回溯) #洛谷P2404 自然数的拆分问题(回溯)# 参考题解:https://www.luogu.com.cn/blog/CM0/solution-p2404 (第 ...
- 洛谷 P2404 自然数的拆分问题C语言
文章目录 前言 一.题目 二.解题思路 1.考察方向 2.深度优先搜索 3.解题 正解(升序+不去重) (去重+升序) 总结 前言 之前看了好多文章都说学习编程时写博客的重要,但一直没有尝试,今天在这 ...
- 洛谷P2404 自然数的拆分问题
搜索--P2404 自然数的拆分问题 题目背景 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和.现在给你一个自然数n,要求你求出n的拆分成一些数字的和.每个拆分后的序列中的数 ...
- 洛谷 P2404 自然数的拆分问题
P2404 自然数的拆分问题 题目背景 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和. 输入输出格式 输入 ...
- 广度优先搜索——好奇怪的游戏(洛谷 P1747)
题目选自洛谷P1747 简单的广搜模板题,4+8 = 12个方向进行bfs,目的地是(1,1) 每次查看队首是否到达,若到达(1,1) 则返回队首步长即可~ 需要注意的是,马走日和像走田的位置计算 i ...
- 洛谷 P2404 自然数的拆分问题(搜索、保证顺序进行搜索)
dfs 搜索即可,主要是搜索顺序:每一个搜索的数需要 >=上一个数,那么对于第一个数下标会是-1,越界,就提前在数组中存储一个1,即可. #include <iostream> #i ...
- 洛谷 p2404 自然数拆分问题
题目链接 题目描述 任何一个大于1的自然数n,总可以拆分成若干个小于n的自然数之和.现在给你一个自然数n,要求你求出n的拆分成一些数字的和.每个拆分后的序列中的数字从小到大排序.然后你需要输出这些序列 ...
- [洛谷]P2404 自然数的拆分问题
一维的dfs搜索得记录搜索了多少次数,先用数组存数字,打印时在做处理, 用一个数组记录每一次拆分的数字是多少,同时用一个指针ct指向上一个拆分出来的数字. 若这个数字为0,就代表找到一种答案,打印处理 ...
最新文章
- Mac Book 问题汇集
- EntityFramework4.5使用Expression类创建动态查询及动态查询导航属性
- centos 7 安装 npm 工具
- 嵌入式系统中看门狗概述。。。
- 15拆分成3个不同的自然数_一个简单的算法 - 将一个正整数拆分成指定几个正整数的组合...
- 用html做qq会员页面导航,untitledQQ会员页面导航3.html
- stm32单片机OLED显示图片 位图转换 Image2Lcd使用
- linux 查看文件开头几行、末尾几行、中间几行
- 第三方支付操作流程,有何优势,又存在哪些风险?
- excel制作折线图
- java gprs通信教程_S7-1200 GPRS通讯快速入门
- 时钟树综合CTS技术经验分享(高薪必备)
- Problem N: 设计飞机类Plane及其派生类
- requests实现登陆、点赞、批量点赞、取消点赞
- nginx快速配置参考
- JS: onfocus和onblur事件应用举例
- C++ 数据结构之栈stack (henu.hjy)
- 如何修改Microsoft edge浏览器主页?
- 什么是HTML? HTML基础
- Python 画二维和三维散点同心圆
热门文章
- 获取某一数据库的所有存储过程的名字
- 计算机硬件的五大单元
- bash资源监控_10个资源成为更好的Bash用户
- 不能断点调试python_为Python调试构建一个不间断的断点
- 什么是 devops_DevOps对您意味着什么?
- 如何使用Emacs Org模式和Reveal.js创建幻灯片
- Bootstrap 响应式设计
- java密码模块怎么做_密码模块设计
- 计算机网络第4版潘爱民_王道考研 计算机网络(2)学习笔记
- python图像分类代码_Kaggle—So Easy!百行代码实现排名Top 5%的图像分类比赛