小工具知识网

当前位置: 首页 > 行业知识 > 备战蓝桥杯---DFS基础刷题

行业知识

备战蓝桥杯---DFS基础刷题

2026-10-21 00:18:52 来源:互联网转载

话不多说,���接看题:

1.注意搜索顺序+枚举方式

首先,看到数据范围,我们就不可以直接每一轮3次的暴力。

我们可以发现a^2的大部分情况>2a以及a+1,并且,我们发现其实1的操作是没有必要的(因为2a以经包括了),因此,我们可以把枚举过程想象成只进行2/3操作,只有实在不行时才选1,注意,如果直接正着做会比较麻烦,如这组数据:

正着做的话存在一个问题那就是我们不知道何时+1,因为+1后可能使后面更优,于是我们考虑反着看就可以发现反着符合刚才说的:

我们考虑最后变成b的前一步,我们发现有只有两种情况,就是*2加上剩下的用加1的操作以及平方加上剩下的用加1的操作(或者就是b-a(当两种都会超b))。

同时加上记忆化搜索即可。

下面是AC代码:

#includeusing namespace std;int t;long long a,b;map mp;long long dfs(long long b){    if(b==a) return 0;    if(mp.count(b)!=0) return mp[b];    mp[b]=abs(b-a);    long long cc=sqrt(b);    if(cc>=a) mp[b]=min(dfs(cc)+1+b-cc*cc,mp[b]);    if(b/2>=a) mp[b]=min(dfs(b/2)+1+b%2,mp[b]);    return mp[b];    }int main(){    cin>>t;    while(t--){        mp.clear();        scanf("%lld%lld",&a,&b);        cout

上一篇:怎么安装网吧游戏服务器?

下一篇:音箱插在主机没声音