博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
构造数列 [迭代加深搜索]
阅读量:5308 次
发布时间:2019-06-14

本文共 1013 字,大约阅读时间需要 3 分钟。

  构造数列

[题目描述]

请构造一个尽量短的序列 A,长度为 len,一开始会给你一个正整数 n,
满足以下条件:
A[1]=1
A[len]=n
A[i]>A[i-1] (len>=i>=2)
A[x]=A[i]+A[j] (1<=i,j<x)

[输入文件]

此题有多组数据,每行一个正整数 n,
输入以 0 结尾

[输出文件]

每行 len 个正整数,为 A 序列

[输入样例 1] 

0

[输出样例 1]

1 2 4

[输入样例 2] 

77 
0

[输出样例 2]

1 2 3 5

1 2 4 5 9 18 36 41 77

[数据范围]
30%: n<=10
100%: n<=100
100%: 数据组数不超过 10 组

 


  分析:

  今天上午考试的时候全程状态掉线,这道题的思路都没想到。

  首先很明显可以先确定搜索的深度,因为最快搜到一个数的方法就是不断乘以2,那么搜索深度的下界就是$log(n)$,那么就在这个深度的基础上进行搜索。然后加两个剪枝:当前得到的数$a[x]$大于$n$就直接退出;当前得到的数最终可能到达的最大的数也小于$n$就直接跳过。

  Code:

 

//It is made by HolseLee on 20th July 2018#include
using namespace std;int n,a[11],depth;bool flag;inline void dfs(int now){ if(flag)return; if(now==depth+1){ if(a[now-1]==n)flag=true; return;} for(int i=1;i
a[now-1]&&a[i]+a[j]<=n){ int num=a[i]+a[j]; for(int k=now;k
>n;if(!n)break; memset(a,0,sizeof(a)); depth=1;a[1]=1;int now=1; while(now

 

转载于:https://www.cnblogs.com/cytus/p/9341200.html

你可能感兴趣的文章
图片生成缩略图
查看>>
动态规划 例子与复杂度
查看>>
查看oracle数据库的连接数以及用户
查看>>
【数据结构】栈结构操作示例
查看>>
中建项目环境迁移说明
查看>>
三.野指针和free
查看>>
activemq5.14+zookeeper3.4.9实现高可用
查看>>
TCP/IP详解学习笔记(3)IP协议ARP协议和RARP协议
查看>>
简单【用户输入验证】
查看>>
python tkinter GUI绘制,以及点击更新显示图片
查看>>
CS0103: The name ‘Scripts’ does not exist in the current context解决方法
查看>>
20130330java基础学习笔记-语句_for循环嵌套练习2
查看>>
Spring面试题
查看>>
窥视SP2010--第一章节--SP2010开发者路线图
查看>>
C语言栈的实现
查看>>
代码为什么需要重构
查看>>
TC SRM 593 DIV1 250
查看>>
SRM 628 DIV2
查看>>
2018-2019-2 20165314『网络对抗技术』Exp5:MSF基础应用
查看>>
Python-S9-Day127-Scrapy爬虫框架2
查看>>