zoukankan      html  css  js  c++  java
  • 【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?'
    ':' ');
    	}
    	return 0;
    }
    
  • 相关阅读:
    JQuery Ajax调用asp.net后台方法
    使用NuGet发布自己的类库包(Library Package)
    Database Schema Reader
    DELL服务器引导光盘图片及下载链接
    android 点击屏幕关闭 软键盘
    xUtils
    fastjson是阿里巴巴的开源JSON解析库
    安卓学习资料
    DELL服务器引导光盘下载
    sqlserver下载
  • 原文地址:https://www.cnblogs.com/wzj-xhjbk/p/9846868.html
Copyright © 2011-2022 走看看