暴力求解——POJ 3134Power Calculus
Description
Starting with x and repeatedly multiplying by x, we can compute x31 with thirty multiplications:
x2 = xxx, x3 = x2xx, x4 = x3xx, ... , x31 = x30xx.
The operation of squaring can appreciably shorten the sequence of multiplications. The following is a way to compute x31 with eight multiplications:
x2 = xxx, x3 = x2xx, x6 = x3xx3, x7 = x6xx, x14 = x7xx7,
x15 = x14xx,
x30 = x15xx15,
x31 = x30xx.
This is not the shortest sequence of multiplications to compute
x31. There are many ways with only seven multiplications. The following is one of them:
x2 = xxx,
x4 = x2xx2,
x8 = x4xx4,
x10 = x8xx2,
x20 = x10xx10,
x30 = x20xx10,
x31 = x30xx.
There however is no way to compute
x31 with fewer multiplications. Thus this is one of the most efficient ways to compute
x31 only by multiplications.
If division is also available, we can find a shorter sequence of operations. It is possible to compute x31 with six operations (five multiplications and one division):
x2 = xxx,
x4 = x2xx2,
x8 = x4xx4,
x16 = x8xx8,
x32 = x16xx16,
x31 = x32 ÷ x.
This is one of the most efficient ways to compute
x31 if a division is as fast as a multiplication.
Your mission is to write a program to find the least number of operations to compute xn by multiplication and division starting with x for the given positive integer n. Products and quotients appearing in the sequence of operations should be x to a positive integer's power. In other words, x-3, for example, should never appear.
Input
The input is a sequence of one or more lines each containing a single integer n. n is positive and less than or equal to 1000. The end of the input is indicated by a zero.
Output
Your program should print the least total number of multiplications and divisions required to compute xn starting with x for the integer n. The numbers should be written each in a separate line without any superfluous characters such as leading or trailing spaces.
Sample Input
- 1
- 31
- 70
- 91
- 473
- 512
- 811
- 953
- 0
Sample Output
- 0
- 6
- 8
- 9
- 11
- 9
- 13
- 12
解题思路:
题目大意:求用一个x,如何在最小的步数使用已经用过的凑出x^n,其中n是1~1000的,可以搜索,很容易想到,<=0和>=2000的点应该直接剪掉。
这个题目方根就是搜索的时候控制搜索的层数即可。
if(a[c]*(1<<(t-c))<n)
return false; //这个约束条件必须加,剪枝,这个点按最大比例每次都乘以2扩充也扩充不到n,那么就剪掉。
程序代码:
- #include <iostream>
- using namespace std;
- int a[];
- int t,b,n;
- bool funt(int c)
- {
- if(c>t)
- return false;
- if(a[c]==n)
- return true;
- if(a[c]<=||a[c]>)
- return false;
- if(a[c]*(<<(t-c))<n)
- return false;
- for(int i=;i<=c;i++)
- {
- a[c+]=a[c]+a[i];
- if(funt(c+))
- return true;
- a[c+]=a[c]-a[i];
- if(funt(c+))
- return true;
- }
- return ;
- }
- int main()
- {
- while(cin>>n&&n)
- {
- if(n==)
- cout<<<<endl;
- else
- {
- t=;
- while()
- {
- a[]=;
- if(funt())
- break;
- t++;
- }
- cout<<t<<endl;
- }
- }
- return ;
- }
暴力求解——POJ 3134Power Calculus的更多相关文章
- 暴力求解——POJ 1321 棋盘问题
Description 在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别.要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编程求解对于给定形状和大小的棋盘,摆放k个棋子 ...
- POJ 1562(L - 暴力求解、DFS)
油田问题(L - 暴力求解.DFS) Description The GeoSurvComp geologic survey company is responsible for detecting ...
- 逆向暴力求解 538.D Weird Chess
11.12.2018 逆向暴力求解 538.D Weird Chess New Point: 没有读好题 越界的情况无法判断,所以输出任何一种就可以 所以他给你的样例输出完全是误导 输出还搞错了~ 输 ...
- 隐型马尔科夫模型(HMM)向前算法实例讲解(暴力求解+代码实现)---盒子模型
先来解释一下HMM的向前算法: 前向后向算法是前向算法和后向算法的统称,这两个算法都可以用来求HMM观测序列的概率.我们先来看看前向算法是如何求解这个问题的. 前向算法本质上属于动态规划的算法,也就是 ...
- BestCoder Round #79 (div.2)-jrMz and angles,,暴力求解~
jrMz and angle Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Other ...
- hdu6570Wave (暴力求解)
Problem Description Avin is studying series. A series is called "wave" if the following co ...
- <字符串匹配>KMP算法为何比暴力求解的时间复杂度更低?
str表示文本串,m表示模式串; str[i+j] 和 m[j] 是正在进行匹配的字符; KMP的时间复杂度是O(m+n) , 暴力求解的时间复杂度是O(m*n) KMP利用了B[0:j]和A[i ...
- POJ 3175 Finding Bovine Roots (暴力求解)
题意:给定一串数字,问你这是一个数字开方根得到的前几位,问你是哪个数字.析:如果 x.123... 这个数字的平方是一个整数的话,那必然sqr(x.124) > ceil(sqr(x.123)) ...
- POJ 3174 Alignment of the Planets (暴力求解)
题意:给定 n 个坐标,问你三个共线的有多少组. 析:这个题真是坑啊,写着 n <= 770,那么一秒时间,三个循环肯定超时啊,我一直不敢写了,换了好几种方法都WA了,也不知道为什么,在比赛时坑 ...
随机推荐
- Visual Studio中Js使用智能感知
使用了第三方的JS库或框架,在VS中编写JS代码,发现真是个悲剧,完全只能手打,智能感知没了,这不符合VS的一贯做风只要在写代码的JS文件加上以下代码,就可以有智能感知了 ///<referen ...
- vs2013下的WCFRest 模板开发WCF
在vs2013下使用wcfRestservice40 是安装不成功的,尝试多遍,都是这样.查看以前vs2012做的wcfrest,经过调教,终于在vs2013下也可以了! 1.新建wcf服务应用程序 ...
- android 如何解决模块之间的通讯的耦合问题
使用EventBus http://wuyexiong.github.io/blog/2013/04/30/android-fragment/ http://yunfeng.sinaapp.com/? ...
- MySQL性能测试工具之mysqlslap使用详解
mysqlslap是mysql自带的基准测试工具,优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比较.msq ...
- Unity Manual 用户手册
unity3d 文档的中文网址: http://game.ceeger.com/Manual/
- 【转】ASP.NET MVC 入门教程列表
ASP.NET MVC小论 2008-12-04 11:11 by T2噬菌体, 8052 visits, 网摘, 收藏, 编辑 摘要:ASP.NET MVC作为微软官方的.NET平台下MVC解决方案 ...
- confluence5.8.10的使用
之前在windows上安装了confluence5.8.10,结果有一天知什么缘故,数据库数据损坏,知识库彻底打不开了,所有的文档都付之东流,真的不是一般心痛.因此考虑将其装到linux机器上,因为t ...
- 功能: 用函数 funName 对数组 objArray 中的每个值进行处理一次,
function each( objArray, funName ) {//功能: 用函数 funName 对数组 objArray 中的每个值进行处理一次,for(var i=0; i<obj ...
- css+js自动化开发之第十五天
一.css上一篇的补充 1.position(页面分层) (1)fiexd将标签固定在页面的某个位置 position属性:top,left,right,bottom (2)relative+abso ...
- Python Tutorial 学习(六)--Modules
6. Modules 当你退出Python的shell模式然后又重新进入的时候,之前定义的变量,函数等都会没有了. 因此, 推荐的做法是将这些东西写入文件,并在适当的时候调用获取他们. 这就是为人所知 ...