给出 n,问至少需要计算几步得到 x^n
每次总使用最新得到的那个数字即a[d]进行搜索
#include<cstdio>
#include <algorithm>
using namespace std;
int a[30],n;
bool dfs(int d,int maxd){
if(a[d]==n) return true;
if(d==maxd) return false;
// int maxv=a[0];
// for(int i=1;i<=d;i++) maxv=max(maxv,a[i]);
if((a[d]<<(maxd-d))<n) return false;
for(int i=d;i>=0;i--){
a[d+1]=a[d]+a[i];
if(dfs(d+1,maxd)) return true;
a[d+1]=a[d]-a[i];
if(dfs(d+1,maxd)) return true;
}
return false;
}
int solve(){
a[0]=1;
if(n==1) return 0;
for(int maxd=1;;maxd++){
if(dfs(0,maxd)) return maxd;
}
}
int main() {
//freopen("datain.txt","r",stdin);
while(scanf("%d", &n) == 1 && n) {
printf("%d\n",solve());
}
}