題目描述
小Q從牛博士那裏獲得了一個數字轉換機,這臺數字轉換機必須同時輸入兩個正數a和b,並且這臺數字轉換機有一個紅色的按鈕和一個藍色的按鈕:
當按下了紅色按鈕,兩個數字同時加1。
當按下了藍色按鈕,兩個數字同時乘2。
小Q現在手中有四個整數a,b,A,B,他希望將輸入的兩個整數a和b變成A,B(a對應A,b對應B)。因爲牛博士允許小Q使用數字轉換機的時間有限,所以小Q希望按動按鈕的次數越少越好。請你幫幫小Q吧。
輸入描述:
輸入包括一行,一行中有四個正整數a,b,A,B,(1≤a,b,A,B≤10^9)。
輸出描述:
如果小Q可以完成轉換,輸出最少需要按動按鈕的次數,否則輸出-1。
示例1
輸入
100 1000 202 2002
輸出
2
遞歸(深度搜索)
#include<iostream>
#include<algorithm>
using namespace std;
int ans = -1;
void solve(int a, int b, int A, int B, int cnt)
{
if(a >= A || b >= B)
{
if(a == A && b == B)
{
if(ans == -1)
ans = cnt;
else
ans = min(ans, cnt);
}
return ;
}
for(int i = 0; i < 2; ++i)
{
if(i == 0)
solve(a + 1, b + 1, A, B, cnt+1);
else
solve(a * 2, b * 2, A, B, cnt+1);
}
return ;
}
int main()
{
int a,b,A,B;
cin >> a >> b >> A >> B;
solve(a, b, A, B, 0);
cout << ans << endl;
return 0;
}