【POJ2248】加法链 idfs
首先,在这道题的搜索框架中,在对每一位进行枚举时,复杂度为\(O(n^2)\),但是可知最优解序列的长度不会太长。
其次,采用 \(bool\) 类型返回值时,是一种存在性搜索,并不一定能够得到最优解。
综合以上两点,需要采取迭代化搜索,每次限制在当前层中找出一个符合条件的答案,如果找到了的话一定是最优解。
updated at 2019.4.27
迭代加深搜索的劣势在于,每次迭代的过程中,对于前面已经失败的情况,依然要重复进行搜索,会导致时间上的冗余。不过,若每一层的分支情况过多时,冗余的操作要比多搜索无用层的代价小得多。
代码如下
#include <cstdio>
#include <memory.h>
using namespace std;
const int maxn=110;
int a[maxn],n,dep;
bool dfs(int now){
	if(now==dep+1)return a[dep]==n;
	for(int i=now-1;i>=1;i--)//优化枚举顺序
		for(int j=i;j>=1;j--){
			if(a[i]+a[j]>n)continue;
			if(a[i]+a[j]<=a[now-1])break;
			a[now]=a[i]+a[j];
			if(dfs(now+1))return 1;
		}
	return 0;
}
int main(){
	while(scanf("%d",&n)&&n){
		memset(a,0,sizeof(a));
		a[1]=1;
		for(dep=1;;dep++)if(dfs(2))break;
		for(int i=1;i<=dep;i++)
			printf("%d%c",a[i],i==dep?'\n':' ');
	}
	return 0;
}
【POJ2248】加法链 idfs的更多相关文章
- block和代理小结
		代理使用原则: 代理方法的参数是要传的值,代理方法的返回值是要得到的值(即要调用的类回传的值),并且在实现的代理方法中的值就是原来的类要传的值(设置delegate=self), 比如2个类 A,B ... 
- UVA 529 Addition Chains(迭代搜索)
		Addition Chains An addition chain for n is an integer sequence with the following four propertie ... 
- 图像处理:卷积模块FPGA 硬件加速
		本文记录了利用FPGA加速图像处理中的卷积计算的设计与实现.实现环境为Altera公司的Cyclone IV型芯片,NIOS II软核+FPGA架构. 由于这是第一次设计硬件加速模块,设计中的瑕疵以及 ... 
- [SinGuLaRiTy] 高级搜索算法
		[SinGuLaRiTy-1039] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 迭代加深搜索(ID) 迭代加深搜索,实质上就是限定下界的 ... 
- 「一本通 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\). 数列中的一 ... 
- Android 图片加载框架Picasso基本使用和源码完全解析(巨细无比)
		写在之前 原本打算是每周更新一篇博文,同时记录一周的生活状态,但是稍微工作忙一点就顾不上写博客了.悲催 还是说下最近的状况,最近两周一直在接公司申请的计费点, 沃商店,银贝壳,微信等等,然后就是不停的 ... 
- SpringBoot启动如何加载application.yml配置文件
		一.前言 在spring时代配置文件的加载都是通过web.xml配置加载的(Servlet3.0之前),可能配置方式有所不同,但是大多数都是通过指定路径的文件名的形式去告诉spring该加载哪个文件: ... 
- 从一个URL加载一个Document
		存在问题 你需要从一个网站获取和解析一个HTML文档,并查找其中的相关数据.你可以使用下面解决方法: 解决方法 使用 Jsoup.connect(String url)方法: Document doc ... 
- 百度推出新技术 MIP,网页加载更快,广告呢?
		我们在2016年年初推出了MIP,帮助移动页面加速(原理).内测数据表明,MIP页面在1s内加载完成.现在已经有十多家网站加入MIP项目,有更多的网站正在加入中.在我们收到的反馈中,大部分都提到了广告 ... 
随机推荐
- Ionic 2 官方示例程序 Super Starter
			原文发表于我的技术博客 本文分享了 Ionic 2 官方示例程序 Super Starter 的简要介绍与安装运行的方法,最好的学习示例代码,项目共包含了 14 个通用的页面设计,如:引导页.主页面详 ... 
- 10 分钟理解 BFC 原理
			一.常见定位方案 在讲 BFC 之前,我们先来了解一下常见的定位方案,定位方案是控制元素的布局,有三种常见方案: 普通流 (normal flow) 在普通流中,元素按照其在 HTML 中的先后位置至 ... 
- 饿了么element UI<el-dialog>弹出层</el-dialog>修改默认样式不能在<style scoped>修改
			如果在非scoped下,修改el-dialog自动添加的DIV类名的style加上important,可以覆盖原来的width,但这样会让整个项目的样式都乱套. 如果在scoped下修改style.所 ... 
- docker网络调试过程
			#1: 添加永久网桥 vi /etc/sysconfig/network-scripts/ifcfg-br0 DEVICE=br0 TYPE=Bridge BOOTROTO=static IPADDR ... 
- Nginx rewrite模块深入浅出详解
			rewrite模块(ngx_http_rewrite_module) nginx通过ngx_http_rewrite_module模块支持url重写.支持if条件判断,但不支持else.另外该模块需要 ... 
- 文件系统的block 数据库中的block 以及内存中的page基础知识汇总(自己理解 可能有误)
			1. 操作系统文件系统中的的block 文件系统中的block 是文件系统最小的读写单元,在HDD的磁盘时代, 一般block的大小可能与磁盘的扇区大小一致为 512bytes 也因为这个原因MBR启 ... 
- Oracle数据库SQLPLUS 连接显示 ??? 的解决
			linux下 安装了中文版本的,造成sqlplus 连接时出现了乱码 如图 一开始以为是LANG 变量的问题 后来发现是NLS_LANG的问题 解决方法: export NLS_LANG=" ... 
- OneZero产品视频
			产品视频地址:http://v.youku.com/v_show/id_XMTU1MDMwOTk2OA==.html 
- c-lodop云打印实现手机打印 JS语句打印
			Lodop和c-lodop目前只能安装到windows操作系统上,但是其他操作系统可通过向C-Lodop安装的电脑发送打印任务,实现手机广域网或局域网打印,打印语句也是简单的JS语句,可以轻松实现云打 ... 
- golang的interface剖析
			背景: golang的interface是一种satisfied式的.A类只要实现了IA interface定义的方法,A就satisfied了接口IA.更抽象一层,如果某些设计上需要一些更抽象的 ... 
