題目連結: https://tioj.ck.tp.edu.tw/problems/1011
# 內容
對於字串來說,Edit Distance 是一個著名的 DP 問題。現在我們把這個問題弄得簡單一點,例如:把字串換成數字。對於一個數字,我們想要藉由某些操作換成數字。而對於整數的一個合法的操作包括以下三種情形:
乘以 2 加 1,即
乘以 2 ,即
除以 2,即
給定整數 A 和 B ,請你求出最小的操作次數 N 使得從 A 開始操作 N 次可以換成 B。
# 思路
其實超簡單,把他想成二分樹吧。你會發現其最小轉換就是最小共同祖先
# 程式碼
#include <bits/stdc++.h> | |
using namespace std; | |
typedef long long ll; | |
int main() { | |
ll a,b,ans = 0; | |
cin>>a>>b; | |
while(a!=b){ | |
if(a>b)a>>1; | |
else b>>1; | |
++ans; | |
} | |
cout<<ans<<endl; | |
} |