自然数拆分(回溯法)
一个整数N(N > 1)可以拆分成若干个大于等于1的自然数之和,请你输出所有不重复的拆分方式。
若满足集合A=B,则称这两种拆分方式是重复的。
例如 6 = 3 + 2 和 6 = 2 + 3, 就是重复的拆分方式。
输入格式:
一个正整数N(1≤N≤52)。
注意:本题N的上限52,是经过PTA平台服务器测试后得到的上限,能够保证较好的搜索策略在PTA提交,在1s内求解。本地PC机上,即使较好方法运行时间也可能大于1s,如果觉得方法没问题,可以先提交试试。
输出格式:
按照拆分方案的字典序由小大到大,输出所有方案,请参考输出样例
输入样例:
在这里给出一组输入。例如:
6
输出样例
6=1+1+1+1+1+1
6=1+1+1+1+2
6=1+1+1+3
6=1+1+2+2
6=1+1+4
6=1+2+3
6=1+5
6=2+2+2
6=2+4
6=3+3
6=6
思路
回溯法 也就是dfs(深度优先遍历) 每次遍历下去 当你减过那个数,最后再加回来(还原)
#include<iostream>
#include<cstdio>
using namespace std;
int n,d[53]={1},m;
void dfs(int a){for(int i=d[a-1];i<=m;i++){if(i == n) continue;d[a] = i;m-=i;if(m == 0){printf("%d=",n);for(int j = 1;j<a;j++)printf("%d+",d[j]);printf("%d\n",d[a]);}elsedfs(a+1);m+=i; }
}
int main(){cin>>n;m = n;dfs(1);cout<<n<<"="<<n; return 0;
}
自然数拆分(回溯法)相关推荐
- 用回溯法找出n个自然数中取r个数的全排列
回溯法也称为试探法,该方法首先暂时放弃关于问题规模大小的限制,并将问题的候选解按某种顺序逐一枚举和检验.在回溯法中,放弃当前候选解,寻找下一个候选解的过程称为回溯. 本实例是用回溯法输出n个自然数中以 ...
- 回溯法输出自然数1~n的全排列。
题目描述:回溯法输出自然数1~n的全排列. 输入:n 输出:1~n的全排列. #include <bits/stdc++.h> using namespace std; int vis[1 ...
- [力扣leetcode39]组合总和及回溯法
[力扣leetcode39]组合总和及回溯法 回溯yyds 小练习 回溯yyds 在算法优化上面回溯法或许没有那么引人注意,但是对于一些题目来说能够回溯已经很好了. 题目:给定一个无重复元素的数组 c ...
- 回溯法采用的搜索策略_17图的搜索算法之回溯法
回 溯 法 回溯算法实际是一个类似枚举的搜索尝试方法,它的主题思想是在搜索尝试中找问题的解,当不满足求解条件就"回溯"返回,尝试别的路径.回溯算法是尝试搜索算法中最为基本的一种算法 ...
- python 回溯法 子集树模板
回溯法(探索与回溯法)是一种选优搜索法,又称为试探法,按选优条件向前搜索,以达到目标.但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足 ...
- python 回溯法 01背包问题_回溯法-01背包问题
一.问题描述 给定 n 件物品,物品的重量为 w[i],物品的价值为 c[i].现挑选物品放入背包中,假定背包能承受的最大重量为 V,问应该如何选择装入背包中的物品,使得装入背包中物品的总价值最大 二 ...
- 算法设计与分析第5章 回溯法(二)【回溯法应用】
第5章 回溯法 5.2 应用范例 1.0-1背包问题 有n件物品和一个容量为c的背包.第i件物品的重量是w[i],价值是p[i].求解将哪些物品装入背包可使这些物品的重量总和不超过背包容量,且价值总和 ...
- 算法设计与分析第5章 回溯法(一)【回溯法】
第5章 回溯法 5.1 回溯法 1.回溯法的提出 有许多问题,当需要找出它的解集或者要求回答什么解是满足某些约束条件的最佳解时,往往要使用回溯法. 2. 问题的解空间 (1)问题的解向量:回溯法希望 ...
- LeetCode 37. Sudoku Solver--数独求解(回溯法)--Java 3ms,Python 80ms 解法
题目地址: Write a program to solve a Sudoku puzzle by filling the empty cells. A sudoku solution must sa ...
最新文章
- 继天元开源后,旷视又亮出“看家本领”:推出Brain++商业版
- SAP WM 能否使用LT12去确认一个需要2-step法确认的TO单?
- windows和linux主机名,windows和linux下如何远程获取操作系统版本和主机名
- 『数据库』 E-R图(实体联系图)你都不会,你设计什么数据库?
- trackby_使用trackBy启动流程
- vue+mintUI搭建移动端新闻类网站
- linux init 参数,Objective-C中实现覆写init函数以及在初始化时添加参数
- 项目 协程-实现非抢占式TCP服务器
- html5在线裁剪,HTML5 Canvas裁剪clip
- vue 第五天 (事件监听基础)
- 自由浮动时间与总浮动时间
- 卸载 vista sp1
- ps知识点2-吸管、修复、画笔、仿章
- Java 代码 各种不规范示范,希望引以为戒,望看到的大哥们 都能把代码写的规范点,方便你我他。
- 无监督特征学习(半监督学习+自学习)
- 树形表格TreeGrid
- Chrome 创建快捷方式后在单页面打开网页内容
- JS 0~~100以内能被3整除也能被5整除的个数和总和
- 好书推荐:《黑客秘笈:渗透测试实用指南》
- 2020.09.29重读 原2020.08.04读 MoreFusion
热门文章
- 自定义桌面开始按钮(winxp、7、8、8.1、10)
- 配置hadoop时,Linux主机名称不要带有下划线
- 计算机毕业设计ssm基于b_s架构的实习管理系统
- Ubuntu解决外接2K屏分辨率低问题
- 易语言 计算机取用户名,易语言GetUserNameA获取系统当前用户名
- AI:2020年6月23日北京智源大会演讲分享之AI创业专题论坛——10:30-11:20陆奇教授《AI创业发展趋势:机会与挑战》
- Foundry教程:ERC-20代币智能合约从编写到部署全流程开发
- 深入理解java虚拟机之——垃圾回收(垃圾判断,垃圾收集算法,垃圾收集器)
- HTML学习笔记(二)--基础
- 实验6 音频放大器的仿真验证