题目

​题目链接:​

题解:

记忆化搜索

#include <bits/stdc++.h>
using namespace std;
map<long long,long long>p;
long long slove(long long n,long long k)
{
if(n<=k) return 1;
if(p[n]!=0) return p[n];
if(n%2==0)
{
p[n]=2*slove(n/2,k)+1;
}
else
{
p[n]=slove(n/2,k)+slove(n/2+1,k)+1;
}
return p[n];
}
int main()
{
int t;
cin>>t;
while(t--)
{
p.clear();
long long n,k;
cin>>n>>k;
cout<<slove(n,k)<<endl;
}
return 0;
}