可以用迭代加深思想的题目,一般是一个要用bfs的思想,但由于分支解太多,而所求解一定会在浅层出现,
所以可以对层数递加,dfs该层是否找得到解。
#include <iostream>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <vector>
#include <queue>
#include <map>
#define inf 0x3f3f3f3f
using 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;
}