迭代加深搜索 codevs 2541 幂运算
codevs 2541 幂运算
从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是不允许出现的。
输入为一个正整数n
输出为一个整数,为从m开始,计算mn的最少运算次数。
样例1
1
样例2
31
样例3
70
样例1
0
样例2
6
样例3
8
n(1<=n<=1000)
数据没有问题,已经出现过的n次方可以直接调用
/*迭代加深搜索的含义:就是dfs前,先规定好dfs的深度,如果到了这个深度还没有结果,就退出dfs,没找到,在这个题目中深度就指的是计算的次数,实现规定好计算的次数,在这个次数内没有出现结果,就返回没找到,对于那种没有搜索边界的题目,可以这样做*/
/*因为这个题目没有说最多对计算多少次,那么如果对于一个结果一直dfs计算下去,不仅没有边界,而且计算的次数也不一定是最少次数。所以用迭代加深搜索。
*/
#include<iostream>
using namespace std;
#include<cstdio>
#define MAXdeep 20/*规定最多计算次数*/
int a[MAXdeep];
bool dfs(int k,int maxdepth,int n)
{
if(a[k]==n)
return true;
if(k==maxdepth) return false;
int maxx=a[];
for(int i=;i<=k;++i)
maxx=max(maxx,a[i]);/*一个非常合理的剪枝,如果每次把指数*2,这是最大的增长方式,如果这样还是比n小,就退出吧*/
if((maxx<<(maxdepth-k))<n) return false;
for(int i=k;i>=;--i)
{/*这里采用倒序循环可以加快速度,先选出比较大的数计算,可以加快扩展速度*/
a[k+]=a[i]+a[k];
if(dfs(k+,maxdepth,n)) return true;
a[k+]=a[k]-a[i];
if(dfs(k+,maxdepth,n)) return true;
}
return false;
}
int solve(int n)
{
if(n==) return ;
a[]=;
for(int i=;i<MAXdeep;++i)
if(dfs(,i,n)) return i;/*依次加深深度*/
return MAXdeep;
}
int main()
{
int n;
scanf("%d",&n);
printf("%d\n",solve(n));
return ;
}
迭代加深搜索 codevs 2541 幂运算的更多相关文章
- codevs 2541 幂运算(迭代加深搜索)
2541 幂运算 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 从m开始,我们只需要6次运算就可以计算出m31 ...
- codevs 2541 幂运算(迭代加深搜索)
/* 一开始想到了简单的深搜 维护当前可用的mi数组 然后回溯用哪个 不断更新新产生的mi 这样的问题是 由于mi不断产生 搜索规模扩大 不好 不好 下面是奇丑的WA掉的代码 做个反面教材 */ #i ...
- UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]
解题思路: 这是一道以快速幂计算为原理的题,实际上也属于求最短路径的题目类型.那么我们可以以当前求出的幂的集合为状态,采用IDA*方法即可求解.问题的关键在于如何剪枝效率更高.笔者采用的剪枝方法是: ...
- Codevs 四子连棋 (迭代加深搜索)
题目描述 Description 在一个4*4的棋盘上摆放了14颗棋子,其中有7颗白色棋子,7颗黑色棋子,有两个空白地带,任何一颗黑白棋子都可以向上下左右四个方向移动到相邻的空格,这叫行棋一步,黑白双 ...
- 埃及分数问题_迭代加深搜索_C++
一.题目背景 http://codevs.cn/problem/1288/ 给出一个真分数,求用最少的1/a形式的分数表示出这个真分数,在数量相同的情况下保证最小的分数最大,且每个分数不同. 如 19 ...
- 迭代加深搜索[codevs1004 四子连棋]
迭代加深搜索 一.算法简介 迭代加深搜索是在速度上接近广度优先搜索,空间上和深度优先搜索相当的搜索方式.由于在使用过程中引入了深度优先搜索,所以也可以当作深度优先搜索的优化方案. 迭代加深搜索适用于当 ...
- 【算法•日更•第三十九期】迭代加深搜索:洛谷SP7579 YOKOF - Power Calculus 题解
废话不多说,直接上题: SP7579 YOKOF - Power Calculus 题意翻译 (略过没有营养的题干) 题目大意: 给出正整数n,若只能使用乘法或除法,输出使x经过运算(自己乘或除自己, ...
- POJ1129Channel Allocation[迭代加深搜索 四色定理]
Channel Allocation Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 14601 Accepted: 74 ...
- BZOJ1085: [SCOI2005]骑士精神 [迭代加深搜索 IDA*]
1085: [SCOI2005]骑士精神 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1800 Solved: 984[Submit][Statu ...
随机推荐
- 最小生成树Kruskal算法(邻接矩阵和邻接表)
最小生成树,克鲁斯卡尔算法. 算法简述: 将每个顶点看成一个图. 在所有图中找权值最小的边.将这条边的两个图连成一个图, 重复上一步.直到只剩一个图. 注:将abcdef每个顶点看成一个图.将最小权值 ...
- 常用SQL查询语句
一.简单查询语句 1. 查看表结构 SQL>DESC emp; 2. 查询所有列 SQL>SELECT * FROM emp; 3. 查询指定列 SQL>SELECT empmo, ...
- AC自动机---病毒侵袭
HDU 2896 题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110773#problem/B Description 当太 ...
- ex_KMP--Theme Section
题目网址: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=110060#problem/B Description It's time f ...
- [moka学习笔记]yii2.0数据库查询的多种方法(未完待整理)
方法一:(使用model) $modelCommunityMail = CommunityMail::find()->where(['com_id'=>$id])->all(); 方 ...
- No.001:Two Sum
问题: Given an array of integers, return indices of the two numbers such that they add up to a specifi ...
- HTML 运算符、类型转换
1.类型转换: 分为自动转换和强制转换,一般用强制转换. 其他类型转换为整数:parseInt(): 其他类型转换为小数:parseFloat(): 判断是否是一个合法的数字类型:isNaN(): 是 ...
- 轻量级SaaS在线作图工具(继之前介绍后完整介绍)
俗话说“一图胜千言”,在办公应用领域,流程图是一个非常好的表现企业业务流程或工作岗位规范等内容的展现形式,比如去给客户做调研,回来后都要描述出客户的关键业务流程,谁.什么时候.在什么地方.负责什么事情 ...
- 利用Jquery使用HTML5的FormData属性实现对文件的上传
1.利用Jquery使用HTML5的FormData属性实现对文件的上传 在HTML5以前我们如果需要实现文件上传服务器等功能的时候,有时候我们不得不依赖于FLASH去实现,而在HTML5到来之后,我 ...
- 挖掘机技术哪家强(c++实现)
描述:为了用事实说明挖掘机技术到底哪家强,组织一场挖掘机技能大赛.现请你根据比赛结果统计出技术最强的那个学校. 输入:输入在第1行给出不超过105的正整数N,即参赛人数.随后N行,每行给出一位参赛者的 ...