传送门
题目大意
假设我们有一对数字。我们可以在一步中从给定的对中得到一个新的对
或
。
让最初的一对数字是。你的任务是找到数字
,也就是说,将
转换成至少一个数字等于
的一对所需的最少步数。
思路
反向遍历,当KaTeX parse error: Expected 'EOF', got '&' at position 5: a==1&̲&b==1时,此时的步数就是从走到
的步数,然后求出一个最小值就是答案。
代码
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);
}