题意、
给出 n,问说至少计算几步得到 x^n。
思路
IDA*,考虑最大值还不能到达n就剪枝
#include <iostream>
using namespace std;
int n;
int num[111];
bool dfs(int cur,int now,int maxd)
{
if(now<=0||(now<<(maxd-cur))<n) return false;
if(now==n) return true;
num[cur]=now;
for(int i=0;i<=cur;i++)
{
if(dfs(cur+1,now+num[i],maxd)) return true;
if(dfs(cur+1,now-num[i],maxd)) return true;
}
return false;
}
int main()
{
while(~scanf("%d",&n)&&n)
{
for(int i=0;;i++)
{
if(dfs(0,1,i))
{
printf("%d\n",i);
break;
}
}
}
return 0;
}