隐藏页面特效

2541 幂运算

2541 幂运算

 

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 
 
题目描述 Description

    从m开始,我们只需要6次运算就可以计算出m31:

 

    m2=m×m,m4=m2×m2,m8=m4×m4,m16=m8×m8,m32=m16×m16,m31=m32÷m。

 

    请你找出从m开始,计算mn的最少运算次数。在运算的每一步,都应该是m的正整数次方,换句话说,类似m-3是不允许出现的。

输入描述 Input Description

输入为一个正整数n

输出描述 Output Description

输出为一个整数,为从m开始,计算mn的最少运算次数。

样例输入 Sample Input

样例1
1

样例2
31

样例3
70

样例输出 Sample Output

样例1
0

样例2
6

样例3
8

数据范围及提示 Data Size & Hint

n(1<=n<=1000)

 

数据没有问题,已经出现过的n次方可以直接调用

分类标签 Tags 点此展开 

 
题解:

迭代加深搜索的含义:

就是dfs前,先规定好dfs的深度,如果到了这个深度还没有结果,就退出dfs,

没找到,在这个题目中深度就指的是计算的次数,实现规定好计算的次数,在这个次数内没有出现结果,就返回没找到,对于那种没有搜索边界的题目,可以这样做

因为这个题目没有说最多对计算多少次,那么如果对于一个结果一直dfs计算下去,不仅没有边界,而且计算的次数也不一定是最少次数。所以用迭代加深搜索。

 

这样,对于每次的搜索 我们限制最多能做几次运算
这样搜索的规模就大大减小
同样的维护已经得到的mi数组
数组的大小对应做了几次运算
加上几个剪枝:
如果mi中最大的<<(limit-k)都到不了n 搜索失败
生成新的mi的时候 尽量组合数大的 这样也可以减小规模

AC代码:

#include<cstdio> #define max(a,b) a>b?a:b using namespace std; const int N=101; int n,a[N]; bool dfs(int k,int limit){ if(a[k]==n) return 1; if(k==limit) return 0; int maxx=0; for(int i=0;i<=k;i++) maxx=max(maxx,a[k]); /*剪枝,如果每次把指数*2,这是最大的增长方式,如果这样还是比n小,就退出吧*/ if(maxx<<(limit-k)<n) return 0; for(int i=k;i>=0;i--){/*这里采用倒序循环可以加快速度,先选出比较大的数计算,可以加快扩展速度*/ a[k+1]=a[i]+a[k]; if(dfs(k+1,limit)) return 1; a[k+1]=a[k]-a[i]; if(dfs(k+1,limit)) return 1; } return 0; } int find(){ if(n==1)return 0; a[0]=1; for(int i=1;i<=20;i++) if(dfs(0,i)) return i;/*依次加深深度*/ } int main(){ scanf("%d",&n); printf("%d\n",find()); return 0; }

 


__EOF__

本文作者shenben
本文链接https://www.cnblogs.com/shenben/p/5994666.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   神犇(shenben)  阅读(329)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
点击右上角即可分享
微信分享提示