poj 3134 Power Calculus(IDA*)
题目大意:
用最小的步数算出 x^n
思路:
直接枚举有限步数可以出现的所有情况。
然后加一个A* 就是如果这个数一直平方 所需要的步骤数都不能达到最优 就剪掉
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <cstring>
#include <cmath>
#include <vector>
using namespace std; int n;
int save[1005]={1};
int h(int val)
{
if(val==0)return 0x3f3f3f3f; int cnt=0;
while(val<n)
{
val*=2;
cnt++;
}
return cnt;
}
bool dfs(int dep,int lit,int top)
{
if(dep>lit)return false; for(int i=0;i<top;i++)
{
save[top]=save[top-1]+save[i]; if(save[top]==n)return true;
if(dep+h(save[top])>lit)continue;
if(dfs(dep+1,lit,top+1))return true; save[top]=abs(save[top-1]-save[i]);
if(save[top]==n)return true;
if(dep+h(save[top])>lit)continue;
if(dfs(dep+1,lit,top+1))return true;
}
return false;
}
int main()
{
while(scanf("%d",&n)!=EOF && n)
{
save[0]=1;
if(n==1)printf("0\n");
else
for(int lit=1;;lit++)
{
if(dfs(1,lit,1))
{
printf("%d\n",lit);
break;
}
}
}
return 0;
}
poj 3134 Power Calculus(IDA*)的更多相关文章
- poj 3134 Power Calculus(迭代加深dfs+强剪枝)
		
Description Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multipli ...
 - POJ 3134 Power Calculus ID-DFS +剪枝
		
题意:给你个数n 让你求从x出发用乘除法最少多少步算出x^n. 思路: 一看数据范围 n<=1000 好了,,暴搜.. 但是 一开始写的辣鸡暴搜 样例只能过一半.. 大数据跑了10分钟才跑出来. ...
 - 迭代加深搜索POJ 3134 Power Calculus
		
题意:输入正整数n(1<=n<=1000),问最少需要几次乘除法可以从x得到x的n次方,计算过程中x的指数要求是正的. 题解:这道题,他的结果是由1经过n次加减得到的,所以最先想到的就是暴 ...
 - POJ 3134 Power Calculus (迭代剪枝搜索)
		
题目大意:略 题目里所有的运算都是幂运算,所以转化成指数的加减 由于搜索层数不会超过$2*log$层,所以用一个栈存储哪些数已经被组合出来了,不必暴力枚举哪些数已经被搜出来了 然后跑$iddfs$就行 ...
 - POJ 3134  -  Power Calculus (IDDFS)
		
题意:求仅仅用乘法和除法最快多少步能够求到x^n 思路:迭代加深搜索 //Accepted 164K 1094MS C++ 840B include<cstdio> #include< ...
 - POJ 3134 - Power Calculus
		
迭代加深 //Twenty #include<cstdio> #include<cstdlib> #include<iostream> #include<al ...
 - 【POJ】3134 Power Calculus
		
1. 题目描述给定一个正整数$n$,求经过多少次乘法或除法运算可以从$x$得到$x^n$?中间结果也是可以复用的. 2. 基本思路实际结果其实非常小,肯定不会超过20.因此,可以采用IDA*算法.注意 ...
 - poj3134 Power Calculus IDA*
		
好端端的一道搜索题目,,,硬生生的被我弄成了乱搞题,,,枚举当前的maxd,深搜结果,然而想到的剪枝方法都没有太好的效果,,,最后用一个贪心乱搞弄出来了,,, 贪心:每次必用上一次做出来的数字与其他数 ...
 - Power Calculus 快速幂计算 (IDA*/打表)
		
原题:1374 - Power Calculus 题意: 求最少用几次乘法或除法,可以从x得到x^n.(每次只能从已经得到的数字里选择两个进行操作) 举例: x^31可以通过最少6次操作得到(5次乘, ...
 
随机推荐
- ZOJ 3396 Conference Call(3点最小生成树)
			
题意:给出一组含m个点的无向图,再给出n个点,这n个点分别以一条边连接到这个无向图中的某个点.对于每个询问,求出3点连通的最小代价.有可能3个点是不能互通的.如图,最小代价就是红色的边的权之和. 思路 ...
 - 信息熵 Information Theory
			
信息论(Information Theory)是概率论与数理统计的一个分枝.用于信息处理.信息熵.通信系统.数据传输.率失真理论.密码学.信噪比.数据压缩和相关课题.本文主要罗列一些基于熵的概念及其意 ...
 - Android 一步步教你从ActionBar迁移到ToolBar
			
谷歌的材料设计也发布了有一段时间了,包括官方的support库 相信大家也熟悉了不少,今天就把actionbar 迁移到toolbar的 经验发出来. 这个地方要注意 我用的图标都是studio里的一 ...
 - view的onFinishInflate()何时调用的?
			
onFinishInflate 当View中所有的子控件均被映射成xml后触发 比如你 自定义一个view叫myView ,路径是,com.test.view.MyView,此view是继承Linea ...
 - 堪称最好的A*算法
			
原文地址:http://theory.stanford.edu/~amitp/GameProgramming/ 相关链接:http://www-cs-students.stanford.edu/%7E ...
 - lua的三目运算符
			
会lua的都知道三目运算符在lua中的写法是 a and b or c 但这里有个问题,就是当b是nil的时候会返回c的值 今天无意中看到一个大神的写法 (a and {b} or {c})[1] 不 ...
 - MySql通用分页存储过程
			
MySql通用分页存储过程 1MySql通用分页存储过程 2 3过程参数 4p_cloumns varchar(500),p_tables varchar(100),p_where varchar(4 ...
 - GC Buffer Busy Waits处理(转载)
			
与单实例不同,在RAC环境中,由于多节点的原因,会因为节点间的资源争用产生GC类的等待,而这其中,GC Buffer Busy Waits又是最为常见的,从性能角度上说,RAC是把双刃剑,用的好,能够 ...
 - CMake 入门
			
编写 CMakeLists.txt 首先编写 CMakeLists.txt 文件,并保存在与 main.cc 源文件同个目录下: # 单个源文件 # CMake 最低版本号要求 cmake_minim ...
 - css3 --- 翻页动画 --- javascript --- 3d --- 准备
			
用css3和javascript做一个翻页动画<知识准备部分> 如有更多疑问请参照:http://www.imooc.com/learn/77 这是用css3的-webkit-transi ...