POJ-3134-Power Calculus(迭代加深)
题意:输入一个n,问x从1次方开始,到n次方 ,可以乘或除已经计算出来的数 ,最少需要执行多少步?
思路:迭代加深 ,深度从0开始 ,直到返回值为真。 在深搜过程中剪枝(深度的判断 ,当前最大值尽全力是否能到达 n )
代码:
/*迭代加深*/
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define max(a,b) a>b?a:b
int dep,num[15],n;
/*枚举深度 从小到大 */
/*数组记录走过的每一步 深搜*/
bool dfs(int cnt,int x)/*x上一次操作的最大的数*/
{
    if(num[cnt]==n)
        return 1;
    if(cnt>=dep)return 0;
    x=max(num[cnt],x);/*计算最大的数*/
    if(x*(1<<(dep-cnt))<n)return 0;/*表示最大的数都得不到n 2,4,8,16这样从x增长都得不到*/
    for(int i=0;i<=cnt;i++)
    {
        num[cnt+1]=num[cnt]+num[i];/*表示相乘*/
        if(dfs(cnt+1,x))return 1;
        num[cnt+1]=abs(num[cnt]-num[i]);/*除法*/
        if(dfs(cnt+1,x))return 1;
    }
    return 0;
}
int main()
{
    while(~scanf("%d",&n)&&n)
    {
        if(n==1)
            printf("0\n");
        else
        {
            num[0]=1;
            for(dep=0;;dep++)
                if(dfs(0,1))break;
            printf("%d\n",dep);
        }
    }
    return 0;
}
POJ-3134-Power Calculus(迭代加深)的更多相关文章
- POJ 3134 Power Calculus (迭代剪枝搜索)
		题目大意:略 题目里所有的运算都是幂运算,所以转化成指数的加减 由于搜索层数不会超过$2*log$层,所以用一个栈存储哪些数已经被组合出来了,不必暴力枚举哪些数已经被搜出来了 然后跑$iddfs$就行 ... 
- 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 (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
		题意:输入正整数n(1<=n<=1000),问最少需要几次乘除法可以从x得到x的n次方,计算过程中x的指数要求是正的. 题解:这道题,他的结果是由1经过n次加减得到的,所以最先想到的就是暴 ... 
- poj 3134 Power Calculus(IDA*)
		题目大意: 用最小的步数算出 x^n 思路: 直接枚举有限步数可以出现的所有情况. 然后加一个A* 就是如果这个数一直平方 所需要的步骤数都不能达到最优 就剪掉 #include < ... 
- POJ-3134-Power Calculus(迭代加深DFS)
		Description Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multipli ... 
- POJ 2248 - Addition Chains - [迭代加深DFS]
		题目链接:http://bailian.openjudge.cn/practice/2248 题解: 迭代加深DFS. DFS思路:从目前 $x[1 \sim p]$ 中选取两个,作为一个新的值尝试放 ... 
随机推荐
- 自己动手用java写一个hashMap
			入坑java很多年了,现在总结一下自己学到的东西. 1.首先我们先来聊聊什么是HashMap? 什么是hash?hash用中文的说法就叫做“散列”,通俗的讲就是把任意长度的字符串输入,经过hash计算 ... 
- property 属性
			#propery 属性"""内置装饰器函数,只在面向对象中使用."""#计算圆的面积,圆的周长 from math import pi cl ... 
- ArrayBuffer转base64详解
			先贴代码: const base64String = window.btoa(String.fromCharCode(... new Uint8Array(buffer))) 看起来非常的简洁,优美. ... 
- 学习Vue.js-Day2
			书接上文/思考反馈 react,ng,vue作用差不多,那各个都有什么特点啊,实际工作中应该用哪一个? 答:其实在实际工作中,组员会通过讨论而选择框架:这三个框架都能解放你的工作量,也适合做单页面应用 ... 
- 全栈前端入门必看 koa2+mysql+vue+vant 构建简单版移动端博客
			koa2+mysql+vue+vant 构建简单版移动端博客 具体内容展示 开始正文 github地址 <br/> 觉得对你有帮助的话,可以star一下^_^必须安装:<br/> ... 
- html+css布局类型
			一.单列布局 1.代码如下 <!doctype html> <html> <head> <meta charset="utf-8"/> ... 
- Git将文件上传至Github过程
			1.安装Git工具(在这里就不多说了) 2.我们需要先创建一个本地的版本库(其实也就是一个文件夹). 你可以直接在桌面右击新建文件夹,也可以右击打开Git bash命令行窗口通过命令来创建. 现在我通 ... 
- Flutter 裁剪类组件 最全总结
			注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 ClipRect ClipRect组件使用矩形裁剪子组件, ... 
- Fortify Audit Workbench 笔记 Access Control: Database
			Abstract 如果没有适当的 access control,就会执行一个包含用户控制主键的 SQL 指令,从而允许攻击者访问未经授权的记录. Explanation Database access ... 
- redis作为消息队列的原理
			Redis队列功能介绍 List 转:https://blog.csdn.net/cestlavieqiang/article/details/84197736 常用命令: Blpop删除,并获得该列 ... 
