原题

给出数n,求出1......n 一串数,其中每个数字分解的两个加数都在这个序列中(除了1,两个加数可以相同),要求这个序列最短。


++m,dfs得到即可。并且事实上不需要提前打好表,直接输出就可以。

#include<cstdio>
using namespace std;
int dep=0,n;
int a[102];
bool dfs(int step)
{
if(step>dep) return a[dep]==n;
for(int i=0;i<step;i++)
{
if(a[step-1]+a[i]>n) break;
a[step]=a[step-1]+a[i];
if(dfs(step+1)) return 1;
}
return 0;
}
int main()
{
a[0]=1;
while(~scanf("%d",&n)&&n)
{
dep=0;
while(!dfs(1)) ++dep;
for(int i=0;i<=dep;i++) printf("%d%c",a[i]," \n"[i==dep]);
}
return 0;
}

提前打表:

#include<cstdio>
using namespace std;
int n,s[110]={0,1,2},cnt=3,l[110]={0,1,2},ans[110][20]={{0},{0,1},{0,1,2}}; void dfs(int x)
{
if (x>cnt) return ;
for (int i=1;i<x;i++)
for (int j=i;j<x;j++)
{
s[x]=s[i]+s[j];
if (s[x]>100 || s[x]<=s[x-1]) continue;
if (!l[s[x]] || l[s[x]]>x)
{
l[s[x]]=x;
for (int l=1;l<=x;l++)
ans[s[x]][l]=s[l];
}
dfs(x+1);
}
} int main()
{
while (cnt<=10) dfs(3),++cnt;//因为a[1]和a[2]是固定的
while(~scanf("%d",&n) && n)
{
for (int i=1;i<=l[n];i++)
printf("%d%c",ans[n][i]," \n"[i==l[n]]);
}
return 0;
}

[zoj] 1937 [poj] 2248 Addition Chains || ID-DFS的更多相关文章

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

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

  2. POJ 2248 - Addition Chains - [迭代加深DFS]

    题目链接:http://bailian.openjudge.cn/practice/2248 题解: 迭代加深DFS. DFS思路:从目前 $x[1 \sim p]$ 中选取两个,作为一个新的值尝试放 ...

  3. [POJ 2248]Addition Chains

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

  4. POJ 2245 Addition Chains(算竞进阶习题)

    迭代加深dfs 每次控制序列的长度,依次加深搜索 有几个剪枝: 优化搜索顺序,从大往下枚举i, j这样能够让序列中的数尽快逼近n 对于不同i,j和可能是相等的,在枚举的时候用过的数肯定不会再被填上所以 ...

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

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

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

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

  7. 1443:【例题4】Addition Chains

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

  8. 「一本通 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\). 数列中的一 ...

  9. LOJ10021 Addition Chains

    题目描述 原题来自:ZOJ 1937 已知一个数列 A0,A1,A2,A3,...,Am(其中A0=1,Am=n,A0<A1<A2<A3<...<Am ).对于每个 k, ...

随机推荐

  1. Mybatis基础入门学习

    Mybatis基础入门学习 mybatis架构分析 搭建测试mybatis架构 )下载并导入mybatis3.2.7.jar(架构),mysql-connector-java-5.1.7-bin.ja ...

  2. 即将开始的python之路

    准备开始学py 记录一下 加油

  3. 【异常】The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone.

    异常错误:The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone ...

  4. 笔记-redis深入学习-1

    笔记-redis深入学习-1 redis的基本使用已经会了,但存储和读取只是数据库系统最基础的功能: 数据库系统还得为可靠实现这两者提供一系列保证: 数据.操作备份和恢复,主要是持久化: 高可用:主要 ...

  5. python基础之继承实现原理、子类调用父类的方法、封装

    继承实现原理 python中的类可以同时继承多个父类,继承的顺序有两种:深度优先和广度优先. 一般来讲,经典类在多继承的情况下会按照深度优先的方式查找,新式类会按照广度优先的方式查找 示例解析: 没有 ...

  6. selenium+PhantomJS 抓取淘宝搜索商品

    最近项目有些需求,抓取淘宝的搜索商品,抓取的品类还多.直接用selenium+PhantomJS 抓取淘宝搜索商品,快速完成. #-*- coding:utf-8 -*-__author__ =''i ...

  7. Java线程和多线程(六)——守护线程

    当我们在Java中创建线程的时候,这个线程在默认的情况下是一个用户线程,并且,如果这个线程在运行,那么JVM就不会终结这个应用.和用户线程不同,当一个线程被标记为守护线程的时候,JVM在用户线程结束的 ...

  8. 如何在一个顶级域名下用两个二级域名访问vps下的两个项目网站--完美解决骗

    本人是原址是http://www.webzhe.com/server/340 后经过本人的实践修改,增加截图,等具体的步骤,完美解决 如何在vps中设置二级域名开通子网站,这个问题涉及到两步:一首先要 ...

  9. CommonTwo

    public int commonTwo(String[] a, String[] b) { int startA=0; int startB=0; int count=0; while((( sta ...

  10. Jenkins拾遗--第二篇(初步配置Jenkins)

    插件配置 第一次安装Jenkins的时候会让你配置插件.这里有一个建议:就是把所有插件都看一遍,如果用不到,就不要勾选.Jenkins插件兼容性有的时候不是很好,多装多出事儿,保持最小集就好.浏览一遍 ...