http://codeforces.com/contest/520/problem/B
/**
CF 295div2 B dp(记忆化搜索)
题目大意:给定一个n,每次操作可以减1,可以乘2,问最少几次操作到m
解题思路:若n>=m,答案为n-m;否则dp[x]=min(dp[x-1],dp[2*x]),采用记忆化搜索来写
*/
#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
int n,m,dp[20005],vis[20005];
int dfs(int x)
{
if(x<=0)
return 9999999;
if(x>=m)
{
dp[x]=x-m;
///printf("%d,%d\n",x,dp[x]);
return dp[x];
}
if(vis[x])
{
///printf("%d,%d\n",x,dp[x]);
return dp[x];
}
vis[x]=1;
dp[x]=min(dfs(x-1),dfs(2*x))+1;
/// printf("%d,%d\n",x,dp[x]);
return dp[x];
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
memset(dp,0x3f3f3f3f,sizeof(dp));
memset(vis,0,sizeof(vis));
printf("%d\n",dfs(n));
}
return 0;
}