递增序列(迭代加深)
描述
依次给你一个递增的数列,第一次给你1,第二次开始,每次给的数字是之前某两次和。告诉你一个数字M,表示第n次给你的数字,求最小的n,同时打印出这n个数的数列,有多组解输出任意
输入
一行,只有一个整数m
输出
第一行输出n。第二行输出数列,每两个数之间有且仅有一个空格。
样例输入
4
样例输出
3
1 2 4
提示
本次是数字4。第一次1,第二次2,第三次(当前)4 。
测试点编号 M 测试点编号 M
1 <=20 ;6 <=1000
2 <=30;7 <=2500
3 <=40 ;8 <=3000
4 <=50 ;9 <=4000
5 <=60 ;10 <=5000
只会打表啊
要迭代加深
不断增加层数
看是否能搜索到
不能贪心一直往后跑
#include<bits/stdc++.h>
using namespace std;
inline int read(){char ch=getchar();int res=0;while(!isdigit(ch)) ch=getchar();while(isdigit(ch)) res=(res<<1)+(res<<3)+(ch^48),ch=getchar();return res;
}
int n,stk[5005],m,top=1;
inline void write(){cout<<top<<'\n';for(int i=1;i<=top;++i)cout<<stk[i]<<" ";exit(0);
}
bool dfs(int pos){if(stk[pos-1]==n)write();if(pos>top)return false; for(int i=pos-1;i>=1;--i){for(int j=pos-1;j>=i;--j){stk[pos]=stk[i]+stk[j];if((stk[pos]<<(top-pos))<n)break;if((stk[pos]+(top-pos))>n)break;if(stk[pos]<=stk[pos-1])break;dfs(pos+1);}}return false;
}
int main(){// freopen("sequence.in","r",stdin);
// freopen("sequence.out","w",stdout);n=read();stk[1]=1;while(!dfs(2))++top;
}
转载于:https://www.cnblogs.com/stargazer-cyk/p/10366426.html
递增序列(迭代加深)相关推荐
- 递增数列(迭代加深搜索)
迭代加深搜索就是限制递归的层数,然后一层层地扩大限制的层数 我们记录当前深度,以及当前应该搜出几个数 设计剪枝: 1.当当前深度乘上2^r(r是还没有选的数)比m还小 那肯定是不行的 因为最大的扩展方 ...
- 【日常练习】递增数列 【迭代加深】
题解 之前没怎么学过A*,IDA*,迭代加深这些搜索算法,只知道搜索+剪枝,真是惭愧-- 错误算法 因为很容易发现,在第i位上你最多能凑出2i-1大小的数,所以我们就贪心凑出小于等于给定的m的最大的那 ...
- 迭代加深搜索与埃及分数求解
迭代加深搜索,实质上是限定下界的深度优先搜索.即首先允许深度优先搜索K层,若没有发现可行解,再将K+1后 重复以上步骤搜索,直到搜索到可行解. 在迭代加深搜索的算法中,连续的深度优先搜索被引入,每一个 ...
- POJ2248 Addition Chains(迭代加深搜索)
题目链接: poj2248 题目大意 给你一个数字n,你需要构造一个首项为1,末项为n的递增序列,并且这个序列的非首项的数字都能从它前面找到两项之和与之相等,前面的两项可以为同一项,即可重复,并且要让 ...
- 再探深搜之剪枝、迭代加深及双向搜索
一.剪枝 剪枝的基本方法: 1.优化搜索顺序 2.排除等效冗余 3.可行性剪枝(上下界剪枝) 4.最优性剪枝 例题1:AcWing 167.木棒 这题首先很容易想出暴力的代码:从小到大枚举木棍总长度的 ...
- POJ - 2248 Addition Chains(dfs+迭代加深)
题目链接:点击查看 题目大意:我们规定加法链有如下特点: 现在给出一个数n,求该数的最短加法链 题目分析:这个题首先我们可以枚举所有可能性,并且进行适当的剪枝: 当前长度大于等于最优解时回溯 当前值等 ...
- 埃及分数问题+迭代加深搜索
理论上可以用回溯法求解,但是解答树非常恐怖,其一深度没有明显上限,1/i的值似乎可以在枚举不断更大的i时越来越小:其二加数的选择在理论上无限制. 解决方案采用迭代加深搜索:从小到大枚举深度上限maxd ...
- 巴士(DFS迭代加深 + 剪枝)
原题链接: https://www.acwing.com/problem/content/188/ 题目描述 一名男子在12:00抵达了某巴士站,并且在12:00-12:59期间他将在那里逗留. 巴士 ...
- 搜索进阶之迭代加深搜索
迭代加深搜索 首先这个不要怕这个东西,其实我刚开始学这个搜索也觉得特别高大上,觉得都是很高大上让人听不懂的专业术语,其实说白了迭代加深搜索的思想和精髓就是控制了搜索深度的dfs,但是却能够达到广搜的效 ...
- 浅谈*迭代加深*深度优先搜索
目录 算法核心概念及思想 算法的产生 概念 拯救时间的函数 例题:<加法链> 如题,由于此文章只讲"迭代加深",所以请先了解what "深度优先搜索" ...
最新文章
- IOS开发笔记1-写一个hello world!程序
- Java源码解析:深入理解==和equals()
- JavaScript内存释放笔记
- java如何读取下拉列表的值_java - 如何在Selenium 2中选择/获取下拉选项
- html5水调歌头代码,张惠言的五首《水调歌头》
- 原生js实现简单的焦点图效果
- c语言程序设计基础项目教程,C语言程序设计基础项目教程
- 创建维护计划失败_如何善于创建和维护大型系统
- 【零基础学Java】—Java 日期时间(三十一)
- 博弈论初步(SG函数)
- html弹幕效果加入视频,JS实现的视频弹幕效果示例
- SpringMVC的Model、Model Map、ModelAndView
- QDialog之屏蔽Esc键
- 金属箔式应变片实验思考题
- coreldraw怎样定数等分_coreldraw 里怎么将线段等分?
- 清华山维EPS二次开发基础篇
- 主图指标,原创极强黄点,将军柱和黄金柱都是3日的
- 微信视频号发布69条直播违规条例
- MySQL—关联查询与子查询(从小白到大牛)
- LaTex: 多种方法实现图片复杂排列