poj3134 Power Calculus---迭代加深dfs

来源:互联网 发布:数据库中的模式 编辑:程序博客网 时间:2024/04/30 19:41

可以用迭代加深思想的题目,一般是一个要用bfs的思想,但由于分支解太多,而所求解一定会在浅层出现,

所以可以对层数递加,dfs该层是否找得到解。



#include <iostream>#include <cstring>#include <string>#include <cstdio>#include <cmath>#include <algorithm>#include <vector>#include <queue>#include <map>#define inf 0x3f3f3f3fusing namespace std;int ans,num,n,way[100000];int dfs(){    int i;    if(num>ans) return 0;    if(way[num]==n) return 1;    if((way[num]<<(ans-num))<n) return 0;//**#$^$Y^*****    for(i=0;i<=num;i++)    {        num++;        way[num]=way[num-1]+way[i];        if(dfs()) return 1;        way[num]=abs(way[num-1]-way[i]);        if(dfs()) return 1;        num--;    }    return 0;}int main(){    int i;    while(scanf("%d",&n)&&n)    {        if(n==1)        {            printf("0\n");            continue;        }        num=0;ans=1;        way[0]=1;        while(ans)        {            if(dfs())            {                printf("%d\n",ans);                break;            }            ans++;        }    }    return 0;}


0 0