NKOI 3464 快速乘积
来源:互联网 发布:大数据时代 企业管理 编辑:程序博客网 时间:2024/05/19 02:27
快速乘积
Time Limit:10000MS Memory Limit:65536K
Total Submit:32 Accepted:18
Case Time Limit:1000MS
Description
给你一个正整数n(1<=n<=1000),问最少需要几次乘法和除法计算就能从x得到xn?
例如得到x31需要六次计算:
1.x2=x*x
2.x4=x2*x2
3.x8=x4*x4
4.x16=x8*x8
5.x32=x16*x16
6.x31=x32/x
当然,也可以是x^2 = x × x, x^3 = x^2 × x, x^4 = x^2 × x^2, x^7 = x^4 × x^3, x^11 = x^4 × x^7, x^22 = x^11 × x^11, x^33 = x^11 × x^22, x^31 = x^33 / x^2. 但这种计算的次数不是最少的。
注意:计算过程中指数不能是负数
Input
输入一个正整数n
Output
输出一个整数,表示最少需要计算的次数
Sample Input
样例1:31样例2:70
Sample Output
样例1:6样例2:8
#include<cstdio>#include<iostream>using namespace std;int n,depth,pow[5000];bool dfs(int k,int cur){if(cur*(1<<(depth-k))<n)return 0;//如果后面都用最大的情况计算仍然到不了n就不再计算if(k==depth)return cur==n;for(int i=0;i<=k;i++){pow[k+1]=pow[i]+pow[k];if(dfs(k+1,pow[k+1]))return 1;pow[k+1]= pow[k]>=pow[i]?pow[k]-pow[i]:pow[i]-pow[k];if(dfs(k+1,pow[k+1]))return 1;} return 0;}int main(){cin>>n;pow[0]=1;while(true){if(dfs(0,1))break;depth++;}cout<<depth;}
0 0
- NKOI 3464 快速乘积
- POJ 3233:Matrix Power Series 矩阵快速幂 乘积
- 最小乘积_基本型_快速排序实现
- NKOI 3659 硬币
- NKOI 1006 护卫队
- NKOI 1123 潜水员
- NKOI 1011 锁妖塔
- NKOI 1023 生命游戏
- NKOI 1036 回文词
- NKOI 1228 丛林道路
- NKOI 2202 字符串乘方
- NKOI 2151 烽火传递
- NKOI 2149 布丁
- NKOI 1086 细胞分裂
- NKOI 3587 全排列
- NKOI 2152 滑动窗口
- NKOI 1349 工作安排
- NKOI 1759 监狱
- Object-C面向对象编程
- 在linux下调用syscalls.h头文件
- 算法 给出一个数组,求连续相邻的最大面积
- 这是转载的 java反射机制与原理,原作者讲解的相对很通俗易懂
- 《文化苦旅》 and 工作初猎
- NKOI 3464 快速乘积
- 相对定位,绝对定位
- Js字符串API
- 例题5-3 UVa10815 Andy's First Dictionary(STL:set&&sstream的应用)
- [学习计划] 2016.9
- 性能测试的一些积累
- 学完数字电子电路基础后对计算机的理解
- Android四大组件之:Activity
- CCF-201512-1-数位之和