DP写法
对于每个i点只能从 i - 1, i + 1转移
每个 i * 2的点只能从 i 转移
所以转台转移方程
dp[i] = min(dp[i - 1],dp[i + 1]);
dp[i * 2] = min(dp[i] + 1);
#include <bits/stdc++.h>
using namespace std;
const int N = 400010;
int f[N];
int n,m;
int main()
{
cin >> n >> m;
memset(f,0x3f,sizeof f);
f[n] = 0;
for(int i = n - 1; i >= 0; i --){
f[i] = min(f[i],min(f[i + 1],f[i - 1]) + 1);
f[i * 2] = min(f[i * 2],f[i] + 1);
}
for(int i = n; i <= 2 * m; i ++){
f[i] = min(f[i],min(f[i + 1],f[i - 1]) + 1);
f[i * 2] = min(f[i * 2],f[i] + 1);
}
cout << f[m] << endl;
}