【ID搜索】uva529Addition Chains

news/2024/11/7 3:37:42/

题目描述:对于一个数列{a},任意一个数都比前面的数大,且是前面任意两个数(可以是同一个数)之和。a0=1。求得到n的最短数列(最优解不为一)。
样例:
输入
5
7
12
15
77
0
输出
1 2 4 5
1 2 4 6 7
1 2 4 8 12
1 2 4 5 10 15
1 2 4 8 9 17 34 68 77

这道题若不知道数列长度乱搜索的话,得到的第一个数列不一定是最优解。所以需要枚举数列长度,再进行深搜。这就是迭代加深搜索。
可以肯定最短为log2(n),最长为n。

在搜索第i个数时,2*ai>=ai>ai-1
为了保证ai大于ai-1,可以直接令ai=ai-1+ai-k

唉,身为蒟蒻的我木有想到这一点就无限TLE……

#include <iostream>
#include <cstdio>
#include <cmath>
using namespace std;int n ,ans[10005]={1,2} ,dep ,p[25] ;bool dfs(int a)
{if(a>dep){if(ans[dep]==n)return 1;return 0;}for(int i=a-1;i>=0;--i){if(ans[a-1]+ans[i]<=n){if((ans[a-1]+ans[i])*p[dep-a]<n)return 0;ans[a]=ans[a-1]+ans[i];if(dfs(a+1))return 1;}}return 0;
}int main()
{p[0]=1;for(int i=1;i<=20;++i)p[i]=p[i-1]<<1;while(~scanf("%d",&n)&&n){if(n==1){printf("1\n");continue;}for(dep=log(n)/log(2);;++dep)if(dfs(2)){for(int i=0;i<dep;++i)printf("%d ",ans[i]);printf("%d\n",ans[dep]);break;}}return 0;
}

http://www.ppmy.cn/news/884489.html

相关文章

java 中\u767b\u5f55\u6210\u529f编码转成明文

new String("\u767b\u5f55\u6210\u529f".getBytes(),"utf-8") 如果不是utf-8&#xff0c;则可以替换成 unicode

[VRFC 10-529] concurrent assignment to a non-net an is not permitted [C:/Users/chenxy/Desktop/digit

[VRFC 10-529] concurrent assignment to a non-net an is not permitted ["C:/Users/chenxy/Desktop/digit&#xff0c; 这个错误的意思是&#xff0c;对一个非网口类型的 an 同时赋值是不被允许的&#xff0c;也就是说&#xff0c;你在多个模块里都存在对an赋值的情况&…

leetcode:529. 扫雷游戏【节点分类,dfs,越界,分类判断,例题】

分析 1.八个方向找地雷 2.越界判断 3.当前是否是地雷计数1or0 4.当前节点的八个周边有几个雷 5.dfs节点&#xff0c;若越界or不是E就返回了&#xff0c;否则看地雷数&#xff1b;若没有地雷&#xff0c;则标志B&#xff0c;并dfs&#xff1b;否则标记地雷数 6.外部&#xff0c…

529day(ajax-post.html)

《2019年3月17日》【连续529天】 标题&#xff1a;ajax-post.html&#xff1b; 内容&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>AJAX发送POST请求</title><style>#loa…

LC.529. 扫雷游戏(DFS)

LC.529. 扫雷游戏(DFS) 思路: d f s dfs dfs即可&#xff0c;需要注意的是这里的相邻是 8 8 8连通。 class Solution { public:int sx,sy,vis[55][55],n,m;//int d[4][2]{0,1,0,-1,1,0,-1,0};int d[8][2]{0,1,0,-1,1,0,-1,0,1,1,1,-1,-1,-1,-1,1};bool jg(int x,int y){retur…

LeetCode 529. Minesweeper 解题报告(python)

529. Minesweeper Fizz Buzz Multithreaded python solution 题目描述 Let’s play the minesweeper game (Wikipedia, online game)! You are given a 2D char matrix representing the game board. ‘M’ represents an unrevealed mine, ‘E’ represents an unrevealed…

[LeetCode]529. Minesweeper

https://leetcode.com/problems/minesweeper/?tabDescription 计算扫雷游戏点击当前位置后显示结果 BFS&#xff0c;不能一直深搜&#xff0c;因为当前位置如果要显示数字&#xff08;即周围有几个雷&#xff09;&#xff0c;那么不能对它的四周进行深搜。 因此先count当前…

调用接口返回 #x6210;#x529F;

最近项目中遇到一个问题&#xff0c;具体的场景是使用axis2接口调用别人的webservice接口&#xff0c;入参是xml格式&#xff0c;结果请求失败&#xff0c;返回的状态码肯定是失败的状态码&#xff0c;但是返回的失败原因非中文是一串字符&#xff0c;让人很是一头雾水&#xf…