满足如下条件的序列被称为加成序列:

X[1]=1,X[m]=n,X[1]<X[2]<......<X[m-1]<X[n]

对于每个k(2<=k<=m)都存在两个整数i和j(1<=i,j<=k-1,i,j可以相等),使得X[k]=X[i]+X[j]。

给定一个n,找出符合上述条件的长度m最小的加成序列,多个答案输出一个即可。n<=100

搜索,对于当前位置k,可以有任意两个i,j相加得出,所以我一开始是两层循环(菜死了)然后得出k再搜索k+1。

但任意两个i,j只需要i不变,j从1到k-1枚举得出的答案就和两个i,j得出的一样。只是顺序不同,不影响两者的和。

然后加入以下剪枝:

1.优化搜索顺序:为了尽快得到n,尽量从大到小枚举

2.排除等效冗余,就是加入一个数组判重

3.迭代加深,因为长度m的值不会太大(<=10),而每次搜索每个数的和,分支很多。所以可以限制搜索深度。

4.如果当前这个数连续翻倍m-k次后还是比n小,那么就可以返回。

代码如下:

#include <iostream>
#include <stdio.h>
#include <queue>
#include <vector>
#include <cmath>
#include <string.h>
using namespace std; int n,arr[],p,vis[],ansr[],ans;
int lim;
bool flag;
int pow(int a,int b)
{
int ret=;
while(b){
if(b&)
ret=ret*a;
a=a*a;
b>>=;
}
return ret;
}
void dfs(int x)
{
if(x==lim){
if(arr[x-]==n){
flag=true; for(int i=;i<=x-;++i)
ansr[i]=arr[i];
}
return ;
}
if(flag)
return ;
if(arr[x-]*pow(,lim-x)<n)
return ;
for(int i=x-;i>=;--i){
if(vis[arr[x-]+arr[i]])
continue;
vis[arr[x-]+arr[i]]=;
arr[x]=arr[x-]+arr[i];
dfs(x+);
vis[arr[x-]+arr[i]]=;
}
}
int main() {
while(scanf("%d",&n),n){
arr[]=;
memset(vis,,sizeof vis);
memset(ansr,,sizeof ansr);
vis[]=; for(lim=;lim<=;lim++)
{
flag=false;
//memset(vis,0,sizeof vis);
//p=1;
dfs();
if(flag)
break;
}
for(int i=;i<lim-;++i)
printf("%d ",ansr[i]);
printf("%d\n",ansr[lim-]);
}
return ;
}

POJ2248-Addition Chains的更多相关文章

  1. [POJ2248] Addition Chains 迭代加深搜索

    Addition Chains Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 5454   Accepted: 2923   ...

  2. POJ2248 Addition Chains 迭代加深

    不知蓝书的标程在说什么,,,,于是自己想了一下...发现自己的代码短的一批... 限制搜索深度+枚举时从大往小枚举,以更接近n+bool判重,避免重复搜索 #include<cstdio> ...

  3. UVA 529 Addition Chains(迭代搜索)

      Addition Chains  An addition chain for n is an integer sequence  with the following four propertie ...

  4. 1443:【例题4】Addition Chains

    1443:[例题4]Addition Chains 题解 注释在代码里 注意优化搜索顺序以及最优化剪枝 代码 #include<iostream> #include<cstdio&g ...

  5. poj 2248 Addition Chains (迭代加深搜索)

    [题目描述] An addition chain for n is an integer sequence with the following four properties: a0 = 1 am ...

  6. 「一本通 1.3 例 4」Addition Chains

    Addition Chains 题面 对于一个数列 \(a_1,a_2 \dots a_{m-1},a_m\) 且 \(a_1<a_2 \dots a_{m-1}<a_m\). 数列中的一 ...

  7. 【POJ2248、LOJ#10021】 Addition Chains

    事先预警:由于我太蒻了,本做法只能在POJ.LOJ等小数据(N<=100)平台上通过,在UVa(洛谷)上大数据并不能通过 戳我获得更好的观看效果 本题不用看,爆搜就是了,但是纯爆搜显然会爆时间, ...

  8. UVA 529 - Addition Chains,迭代加深搜索+剪枝

    Description An addition chain for n is an integer sequence  with the following four properties: a0 = ...

  9. [POJ 2248]Addition Chains

    Description An addition chain for n is an integer sequence with the following four properties: a0 = ...

  10. Addition Chains POJ - 2248 (bfs / dfs / 迭代加深)

    An addition chain for n is an integer sequence <a0, a1,a2,...,am=""> with the follow ...

随机推荐

  1. Zabbix 各种报错信息和遇到的问题处理(持续总结更新~~~~~)

    问题1:Zabbix poller processes more than 75% busy 解决: 1.修改配置文件: # vim /etc/zabbix/zabbix_server.conf St ...

  2. MMU二级页表

    https://blog.csdn.net/forDreamYue/article/details/78887035

  3. POJ-3660.Cow Contest(有向图的传递闭包)

      Cow Contest Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 17797   Accepted: 9893 De ...

  4. oracle 按表数据新增一行

    在功能实现时,能尽量用一个sql语句直接实现业务逻辑的话,就不要去写C#代码,便于维护. 以下sql的逻辑是:给明细表新增一条数据,前提是传入的债券代码存在与债券表,否则不新增.此sql返回受影响行数 ...

  5. C/C++字符串使用整理

    在C语言中,字符串有多种操作与处理方法.话不多说,下面就整理一下C语言中字符串的使用整理. 1.头文件 字符串的头文件: #include<cstring> 2.输入 通常,字符串有多种输 ...

  6. 51单片机学习笔记(郭天祥版)(6)——键盘的作业题、AD、DA、DS18B20(这里之后看清翔的补一下好了)

    A:analog,D:digital AD,就是模拟量转换为数字量,DA就是数字量转换为模拟量 为什么要转换? 单片机是数字芯片,内部只有0和1,没法表示模拟量 比如我们如果需要2.5V怎么办?其实是 ...

  7. promise之我见

    在我们平时的方法中有很多方法是promise封装的, 有些函数后边跟的then和catch 就是promise的方法,先看一下pormise的特点 (1)对象的状态不受外界影响.Promise对象代表 ...

  8. 国内最火的10款Java开源项目,都是国人开发,CMS居多

    原文链接:https://www.cnblogs.com/jimcsharp/p/8266954.html 国内的开源环境已经相当好,但是国内开发注重是应用,创新有但不多,从榜单可以看出,专门搞技术的 ...

  9. linux升级openssh到7.9

    客户linux主机ssh存在高危漏洞,需要进行升级修复. linux联网后,直接命令行: [root@gw ~]# yum update openssl -y 此命令只是小版本的升级,比如将opens ...

  10. import os, glob, fnmatch--Python os/glob/fnmatch主要函数总结

    auther: Lart date: 2019-01-17 update: 2019-01-18 09:55:36 --- import os, glob, fnmatch 针对某些操作, 官方推荐这 ...