poj3134 Power Calculus
题目描述:
你现在有x^1,每动一步可以用当前存在的x^a和x^b获得x^(a+b)或x^(abs(a-b))。给出n(n<=1000),求最少多少步能得到x^n。
题解:
IDDFS。枚举步数,然后dfs+剪枝。
剪枝:
1.目标高于上限时减掉;
2.当前存在两个>n或以上时减掉。
代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define N 1050
int n,lim;
int a[N]={};
int vis[N]={,};
bool fg=;
void dfs(int dep,int mx)
{
if(a[dep-]==n)fg=;
if(fg)return ;
if(dep>lim)return ;
if(mx*(<<(lim-dep+))<n)return ;
for(int i=;i<dep;i++)
{
int x = a[i]+a[dep-];
if(mx<n||x<n)
{
if(!vis[x])
{
vis[x]=;
a[dep]=x;
dfs(dep+,max(mx,x));
vis[x]=;
}
}
x=a[i]-a[dep-];
if(x<)x=-x;
if(mx>n&&x>n)continue;
if(!vis[x]&&x)
{
vis[x]=;
a[dep]=x;
dfs(dep+,max(mx,x));
vis[x]=;
}
}
}
int main()
{
while(scanf("%d",&n)>)
{
fg=;
if(!n)break;
if(n==)
{
printf("0\n");
continue;
}
for(lim=;;lim++)
{
dfs(,);
if(fg)
{
printf("%d\n",lim);
break;
}
}
}
return ;
}
poj3134 Power Calculus的更多相关文章
- poj3134 Power Calculus IDA*
好端端的一道搜索题目,,,硬生生的被我弄成了乱搞题,,,枚举当前的maxd,深搜结果,然而想到的剪枝方法都没有太好的效果,,,最后用一个贪心乱搞弄出来了,,, 贪心:每次必用上一次做出来的数字与其他数 ...
- Power Calculus 快速幂计算 (IDA*/打表)
原题:1374 - Power Calculus 题意: 求最少用几次乘法或除法,可以从x得到x^n.(每次只能从已经得到的数字里选择两个进行操作) 举例: x^31可以通过最少6次操作得到(5次乘, ...
- 题解 SP7579 YOKOF - Power Calculus
SP7579 YOKOF - Power Calculus 迭代加深搜索 DFS每次选定一个分支,不断深入,直至到达递归边界才回溯.这种策略带有一定的缺陷.试想以下情况:搜索树每个节点的分支数目非常多 ...
- 【算法•日更•第三十九期】迭代加深搜索:洛谷SP7579 YOKOF - Power Calculus 题解
废话不多说,直接上题: SP7579 YOKOF - Power Calculus 题意翻译 (略过没有营养的题干) 题目大意: 给出正整数n,若只能使用乘法或除法,输出使x经过运算(自己乘或除自己, ...
- 迭代加深搜索(以Power Calculus POJ--3134 UVa--1374为例)
本题代码如下: #include<cstdio> #include<cstring> #include<algorithm> using namespace std ...
- poj 3134 Power Calculus(迭代加深dfs+强剪枝)
Description Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multipli ...
- UVa 1374 - Power Calculus——[迭代加深搜索、快速幂]
解题思路: 这是一道以快速幂计算为原理的题,实际上也属于求最短路径的题目类型.那么我们可以以当前求出的幂的集合为状态,采用IDA*方法即可求解.问题的关键在于如何剪枝效率更高.笔者采用的剪枝方法是: ...
- poj 3134 Power Calculus(IDA*)
题目大意: 用最小的步数算出 x^n 思路: 直接枚举有限步数可以出现的所有情况. 然后加一个A* 就是如果这个数一直平方 所需要的步骤数都不能达到最优 就剪掉 #include < ...
- 【POJ】3134 Power Calculus
1. 题目描述给定一个正整数$n$,求经过多少次乘法或除法运算可以从$x$得到$x^n$?中间结果也是可以复用的. 2. 基本思路实际结果其实非常小,肯定不会超过20.因此,可以采用IDA*算法.注意 ...
随机推荐
- element-ui公用模态框自定义样式与scoped样式生效问题解决方案
//先插如效果图 里面内容均为传进来的.包括取消与确定按钮,因为每个页面的绑定事件不一样. //下面这个图片为初始样式 //拖动模态框指令需要插件.详情看我下一篇,以下是地址 https://www. ...
- 组合数的几种球阀 By cellur925
先来了解几个概念:排列数,组合数. 一.定义及有用的性质 排列数:从n个不同元素中依次取出m个元素排成一列的方案数.P(n,m)=n!/(n-m)! 组合数:从n个不同元素中依次取出m个元素形成一个集 ...
- float(double)快速转换int的方法
自己写一个软件渲染器的时候,无意中发现float转换int非常耗时,于是查阅文章,这才有了这个命题,以前不清楚还有这么个机制.网上看了很多文章,搜索到了一个数字6755399441055744,这个是 ...
- 《windows核心编程系列》一谈谈windows中的错误处理机制
错误处理 我们写的函数会用返回值表示程序执行的正确与否,使用void,就意味着程序一定不会出错.Bool类型标识true时为真,false时为假.其他类型根据需要可以定义成不同意义. Windows除 ...
- [ZPG TEST 114] 阿狸的英文名【水题】
1. 阿狸的英文名 阿狸最近想起一个英文名,于是他在网上查了很多个名字.他发现一些名字可以由两个不同的名字各取一部分得来,例如John(约翰)的前缀 “John”和Robinson(鲁滨逊) ...
- Jewel Magic UVA - 11996 || bzoj1014: [JSOI2008]火星人prefix
Jewel Magic UVA - 11996 这是一道用splay/非旋treap做的题(这里用的是非旋treap) 1/2/3是splay/非旋treap的常规操作.对于操作4,可以用哈希法求LC ...
- Android上的进程通信(IPC)机制
Interprocess Communication Android offers a mechanism for interprocess communication (IPC) using rem ...
- 对数组随机赋值,并输出(Arrays.toString(arr))
import java.util.Arrays; public class Demo { public static void main(String[] args) { int[] arr = ne ...
- C# 判断文件和文件夹是否存在并创建
C# 判断文件和文件夹是否存在并创建 using System; using System.Data; using System.Configuration; using System.Collect ...
- js 宿主对象的属性和方法总结
(1)属性: //height,width; a=document.documentElement.clientHeight; //文档可视高度,由 ...