​传送门​

题目大意

假设我们有一对数字Codeforces 134 B_i++。我们可以在一步中从给定的对中得到一个新的对Codeforces 134 B_i++_02Codeforces 134 B_最小值_03
让最初的一对数字是Codeforces 134 B_i++_04。你的任务是找到数字Codeforces 134 B_最小值_05,也就是说,将Codeforces 134 B_i++_04转换成至少一个数字等于Codeforces 134 B_i++_07的一对所需的最少步数。

思路

Codeforces 134 B_i++_08
反向遍历,当KaTeX parse error: Expected 'EOF', got '&' at position 5: a==1&̲&b==1时,此时的步数就是从Codeforces 134 B_i++_04走到Codeforces 134 B_i++_10的步数,然后求出一个最小值就是答案。

代码

int n;
int min1=inf;
void dfs(int a,int b,int step){
if(a<1||b<1||step>=min1) return ;
if(a==1&&b==1) min1=min(min1,step);
if(a-b>0) dfs(a-b,b,step+1);
if(b-a>0) dfs(a,b-a,step+1);
}

int main(){
cin>>n;
for(int i=1;i<=n;i++){
dfs(i,n,0);
}
printf("%d\n",min1);
}