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 迭代加深的主要内容,如果未能解决你的问题,请参考以下文章
POJ 2248 Addition Chains dfs(水)