POJ2248 Addition Chains 迭代加深

Posted jackpei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ2248 Addition Chains 迭代加深相关的知识,希望对你有一定的参考价值。

不知蓝书的标程在说什么,,,,于是自己想了一下。。。发现自己的代码短的一批。。。


 

限制搜索深度+枚举时从大往小枚举,以更接近n+bool判重,避免重复搜索

#include<cstdio>
#include<iostream>
#include<cstring>
#define R register int
using namespace std;
inline int g() {
    R ret=0; register char ch; while(!isdigit(ch=getchar())); 
    do ret=ret*10+(ch^48); while(isdigit(ch=getchar())); return ret;
}
int n,dep=1;
int a[110];
bool v[110];
inline bool dfs(int crt) {
    if(crt==dep+1) return a[dep]==n;
    for(R i=crt-1;i>=1;--i) for(R j=i;j>=1;--j) {
        if(a[i]+a[j]>n) continue;
        if(a[i]+a[j]<=a[crt-1]) break;
        if(v[a[i]+a[j]]) continue;
        a[crt]=a[i]+a[j]; if(dfs(crt+1)) return true;
    } return false;
}
signed main() {
    while(n=g(),n!=0) { dep=1;
        memset(a,0,sizeof(a));memset(v,false,sizeof(v)); a[1]=1;
        while(!dfs(2)) ++dep;
        for(R i=1;i<=dep;++i) printf("%d ",a[i]); putchar(\n);
    }
}

2019.04.26

 

以上是关于POJ2248 Addition Chains 迭代加深的主要内容,如果未能解决你的问题,请参考以下文章

POJ2248 Addition Chains 迭代加深

POJ2248-Addition Chains

POJ 2248 Addition Chains dfs(水)

POJ 2248 Addition Chain

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

Addition Chains