题目传送
本蒟蒻的代码
#include<bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int n,k,minn=INT_MAX;
bool a[500009];
void dfs(int step,int ceng){
if(ceng==k){
minn=min(minn,step);
return ;
}
if(step>minn||ceng<0||ceng>100000)return ;
if(ceng*2<=k&&a[ceng*2]==0){
a[ceng*2]=1;
dfs(step+1,ceng*2);
a[ceng*2]=0;
}
if(ceng-1>=0&&a[ceng-1]==0){
a[ceng-1]=1;
dfs(step+1,ceng-1);
a[ceng-1]=0;
}
if(a[ceng+1]==0&&ceng<=k){
a[ceng+1]=1;
dfs(step+1,ceng+1);
a[ceng+1]=0;
}
}
int main(){
cin>>n>>k;
dfs(0,n);
cout<<minn;
}
超时两个点,怎么办?