POJ 3134 - Power Calculus 迭代加深搜索(DFSID)

来源:互联网 发布:淘宝权的女朋友 编辑:程序博客网 时间:2024/05/21 07:03

     最开始想动态规划...想了好久想不通.然后试着写BFS..各种超时....参考大牛的提示..DFSID把它A掉了...效率很高啊...而且代码写起来思路也很清晰...    


Program:

#include<iostream>#include<stdio.h>#include<cmath>#include<queue>#include<stack>#include<algorithm>#include<string.h>#define ll long long#define oo 10000007using namespace std;     int way[1005],num; bool DFSID(int x,int step){       int i;      if (num>step) return false;      if (way[num]==x) return true;      if (way[num]<<(step-num)  < x) return false; // 强力剪枝       for (i=0;i<=num;i++)      {             num++;             way[num]=way[num-1]+way[i];             if (way[num]<=10000 && DFSID(x,step)) return true;              way[num]=way[num-1]-way[i];               if (way[num]>0 && DFSID(x,step)) return true;                        num--;      }       return false;    }int main(){        int i,x;      freopen("input.txt","r",stdin); freopen("output.txt","w",stdout);            while (~scanf("%d",&x) && x)       {            for (i=0;;i++)            {                 way[num=0]=1;                 if (DFSID(x,i)) break;            }            printf("%d\n",i);      }      return 0;}


原创粉丝点击