acwing-170. 加成序列(迭代加深)「建议收藏」

acwing-170. 加成序列(迭代加深)「建议收藏」满足如下条件的序列 X(序列中元素被标号为 1、2、3…m)被称为“加成序列”:X[1]=1X[m]=nX[1]<X[2]<…<X[m−1]<X[m]对于每个 k(2≤k≤m)都存在两个整数 i 和 j (1≤i,j≤k−1,i 和 j 可相等),使得 X[k]=X[i]+X[j]。你的任务是:给定一个整数 n,找出符合上述条件的长度 m 最小的“加成序列”。如果有多个满足要求的答案,只需要找出任意一个可行解。输入格式输入包含多组测试用例。每组测试用例占据一行,包含

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

满足如下条件的序列 X(序列中元素被标号为 1、2、3…m)被称为“加成序列”:

X[1]=1
X[m]=n
X[1]<X[2]<…<X[m−1]<X[m]
对于每个 k(2≤k≤m)都存在两个整数 i 和 j (1≤i,j≤k−1,i 和 j 可相等),使得 X[k]=X[i]+X[j]。
你的任务是:给定一个整数 n,找出符合上述条件的长度 m 最小的“加成序列”。

如果有多个满足要求的答案,只需要找出任意一个可行解。

输入格式
输入包含多组测试用例。

每组测试用例占据一行,包含一个整数 n。

当输入为单行的 0 时,表示输入结束。

输出格式
对于每个测试用例,输出一个满足需求的整数序列,数字之间用空格隔开。

每个输出占一行。

数据范围
1≤n≤100

输入样例:
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

题解
迭代加深
dfs(int u,int maxn):已经做了u个了,当前允许最多做maxn次
if(…)return true;
if(u == maxn)return true;

#include<bits/stdc++.h>
using namespace std;
const int N = 210;
int a[N],n;
vector<int>res;
bool dfs(int u,int maxn){ 
   
    if(a[u - 1] == n)return true;
    if(u == maxn){ 
   
        return false;
    }
    int vis[N];
    memset(vis,0,sizeof vis);
    for(int i = u - 1;i >= 0;i --){ 
   
        for(int j = i;j >= 0 ;j --){ 
   
            a[u] = a[i] + a[j];
            if(a[u] <= a[u - 1])continue;
            if(vis[a[u]])continue;
            vis[a[u]] = true;
            if(dfs(u + 1,maxn))return true;
        }
    }
    return false;
}
int main(){ 
   
    while(cin>>n,n != 0){ 
   
        res.clear();
        int maxn;
        a[0] = 1;
        for(maxn = 1;maxn <= n;maxn ++){ 
   
            if(dfs(1,maxn))break;
        }
        for(int i = 0;i < maxn;i ++)cout<<a[i]<<" ";
        cout<<endl;
    }
    return 0;
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/168662.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • eclipse安卓项目_eclipse开发android

    eclipse安卓项目_eclipse开发androideclipse之安卓开发环境搭建一、安装JAVAJDK:二、安装AndroidSDK:三、为eclipse安装ADT插件。五、检查eclipse中的安卓SDK路径六、创建eclipse中的安卓模拟器网上不知道哪个哥们教程里提供的JAVAJDK15的安装包有问题,安装AndroidSDK的时候一直找不到它,干脆自己重新整理一份安装资料出来。一、安装JAVAJDK:下载JDK15的官网下载地址点这里,只需要下载下图中这个exe文件。安装一直按照提示点击即可,主要是选择安装路径,没啥其它

    2022年9月26日
    1
  • CAN总线协议

    CAN总线协议目录1.总体概述 1.1基本概念1.2通讯方式1.3为什么使用CAN?1.总体概述 1.1基本概念  CAN是ControllerAreaNetwork的缩写(以下称为CAN),是ISO国际标准化的串行通信协议。在北美和西欧,CAN总线协议已经成为汽车计算机控制系统和嵌入式工业控制局域网的标准总线,并且拥有以CAN为底层协议专为大型货车和重工机械车辆设计的J1939协议。 1.2通讯方式  回顾前面学到的RS23.

    2022年6月28日
    38
  • 个人觉得好用的Xmind快捷键(mac)[通俗易懂]

    个人觉得好用的Xmind快捷键(mac)[通俗易懂]commandN新建脑图空格修改文字Delete删除文字commandZ撤销上一步Enter添加平行分支Tab添加子节点command+/-放大/缩小commandI上传图片command+Shift+H插入超链接command+1,2,3,4,5,6快速添加优先等级图标-收缩目前分支方向键展开当前分支…

    2022年6月5日
    77
  • 角动量守恒与陀螺力矩[通俗易懂]

    角动量守恒与陀螺力矩[通俗易懂]角动量守恒与陀螺力矩角动量守恒定律.这个定律可以用快转的轮子和它下面的回转器来演示:见图20-1.假如我们站在一个转椅上,并拿着水平轴转动的轮子,这个轮子绕水平轴有一个角动量L0,L0=Jω其中J为轮子绕????轴的转动惯量,ω为绕????轴的角速度(图20-2所示坐标系),绕竖直轴的角动量不会因为椅子的支轴(无摩擦)而改变,假如我们把轮子用手将原来水平的转轴抬起来到竖直的方向,如图20-1所…

    2022年5月15日
    100
  • 手机号码归属地 mysql_最新全国手机号码归属地信息SQLite数据库2019年2月更新

    手机号码归属地 mysql_最新全国手机号码归属地信息SQLite数据库2019年2月更新安装pipinstallphone-db使用:查询数据库中手机号段总条数>>>fromphone_dbimportSession,Phone,Region>>>session=Session()>>>session.query(Phone).count()415284查询北京市联通手机号段总条数>>>…

    2022年7月22日
    13
  • 菜鸟入门Docker[通俗易懂]

    菜鸟入门Docker[通俗易懂]菜鸟入门Docker说明一、什么是Docker(1)虚拟机和Linux容器二、Docker用途三、Docker安装(1)设置仓库(2)安装DockerEngine-Community(3)验证安装成功四、Docker启动与停止(1)启动docker(2)停止docker(3)重启docker五、Docker配置(1)将用户加入Docker用户组(2)配置daemon.json六、image…

    2022年5月16日
    24

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号