1443:【例题4】Addition Chains

题解

注释在代码里

注意优化搜索顺序以及最优化剪枝

代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
#include<queue>
#include<functional> using namespace std; int n,minn,ans[],a[];
//n是序列的最大值
//minn是拆数字最小层数
//ans存答案
//a是一个过程中起记录作用的数组 void dfs(int x) //递归第x层
{
if(x->minn) return ; //超过最小层数,剪枝
if(a[x-]>n) return; //上一层的数字大于最大值n,剪枝
if(a[x-]==n) //上一层的数字=n,有希望构成一个完整解答
{
if((x-1)>=minn) return; //很遗憾,层数超了
minn=x-; //记下暂定答案
for(int i=;i<x;i++) ans[i]=a[i];
}
else
{
for(int j=x-;j>=;j--)
//题目要求ak=ai+aj,倒着枚举一下,看看能否继续扩展下一层
{
if(a[x-]+a[j]<=n)
{
a[x]=a[x-]+a[j]; //可以继续扩展
dfs(x+);
a[x]=; //回溯
}
}
}
} int main()
{
while(scanf("%d",&n)!=EOF) //输入非空
{
if(n==) break;
else
{
a[]=; //初始化第一层为1
minn=; //拆数字的最小层数
dfs(); //从第二层开始递归
for(int i=;i<=minn;i++) printf("%d ",ans[i]); //确定层数,输出答案
printf("\n");
}
}
return ;
}

特别鸣谢

orz  神仙

1443:【例题4】Addition Chains的更多相关文章

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

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

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

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

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

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

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

  5. 一本通【例题4】Addition Chains——题解

    又是一道剪枝剪了半天的搜索题...题目传送 要充分利用题目中的约束条件:1.:2.对于每个k(1≤k≤m)k(1≤k≤m)满足ak=ai+aj(0≤i,j≤k−1)ak=ai+aj(0≤i,j≤k−1 ...

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

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

  7. [POJ 2248]Addition Chains

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

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

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

  9. C++解题报告 : 迭代加深搜索之 ZOJ 1937 Addition Chains

    此题不难,主要思路便是IDDFS(迭代加深搜索),关键在于优化. 一个IDDFS的简单介绍,没有了解的同学可以看看: https://www.cnblogs.com/MisakaMKT/article ...

随机推荐

  1. J2EE WEB应用架构分析

    1. 架构概述 J2EE体系包括java server pages(JSP) ,java SERVLET, enterprise bean,WEB service等技术.这些技术的出现给电子商务时代的 ...

  2. vue中使用stylus编写css

    安装步骤 cnpm install stylus --save-dev cnpm install stylus-loader --save-dev 写法如下: <style lang=" ...

  3. Delphi 字符串运算符

  4. 点亮指路灯led

    为什么要使用LED? (bootloader,kernel)开发初期,由于串口等硬件尚未被初始化,因此调试手段相当有限,这时通常会采用LED来做为程序调试的重要手段. LED驱动设计: 1.设置GPI ...

  5. windows2008R2下安装sqlserver2008R2时,点setup.exe应用程序无法打开错误代码0xc0150004

    windows2008R2下安装sqlserver2008R2时,点setup.exe应用程序无法打开错误代码0xc0150004 问题截图: 网上查的答案都是需要安装.net framework 3 ...

  6. Ubuntu无法安装nginx

    1.问题Reading package lists... DoneBuilding dependency tree       Reading state information... DoneSom ...

  7. mysql如何查询一个字段在哪几张表中

    SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.`COLUMNS` WHERE COLUMN_NAME = 'xxx' ; xxx替换成需 ...

  8. 3.Pod控制器应用进阶

    一.Pod的生命周期 init container -- Post start  --  running -- pre stop -- main container 创建Pod经历的过程:->a ...

  9. day_10猜年龄游戏函数版

    ''' 1. 在猜年龄的基础上编写登录.注册方法,并且把猜年龄游戏分函数处理,如 2. 登录函数 3. 注册函数 4. 猜年龄函数 5. 选择奖品函数 ''' import json real_age ...

  10. iOS使用protobuf环境的配置

    配置protobuf需要HomeBrew工具或则是MacPort.如没有安装,则需要配置HomeBrew工具或则是MacPort. 步骤1(环境配置前的准备工作): 1:使用HomeBrew brew ...