神奇的操作
仔细思考后发现本题没有什么办法,但是仔细想想好像记忆化可以过(因为每次/2或/3,-1的操作尽量不用),但是,1e9好像没办法记忆化,然后就只能碰碰运气,加个优化不记忆化能过吗?qwq——显然过不了
可以当个套路来记,用map记忆化
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n;
int f1[33],f2[25];
map <ll ,int > mp;
ll ksm(ll x,ll pow){
ll ans=1,res=x;
while(pow){
if(pow&1) ans=ans*res;
res=res*res;
pow>>=1;
}
return ans;
}
const int N=1e9;
int sum=N,now;
int dfs(int x){
if(mp[x]){
return mp[x];
}
int tp=N;
if(x==1){
return 1;
}
if(x==2||x==3){
return 2;
}
if(x%3==0){
tp=min(tp,dfs(x/3)+1);
}
if(x%3==1){
tp=min(tp,dfs((x-1)/3)+2);
}
if(x%2==0){
tp=min(tp,dfs(x/2)+1);;
}
if(x%3==2){
tp=min(dfs((x-2)/3)+3,tp);
}
if(x%2==1){
tp=min(dfs((x-1)/2)+2,tp);
}
mp[x]=tp;
return tp;
}
int main(){
int T;
scanf("%d",&T);
while(T--){
scanf("%d",&n);
sum=dfs(n);
printf("%d\n",sum);
}
}