[2016-03-03][UVA][1374][Power Calculus]
Posted 红洋
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[2016-03-03][UVA][1374][Power Calculus]相关的知识,希望对你有一定的参考价值。
[2016-03-03][UVA][1374][Power Calculus]- 时间:2016-03-03 16:14:01 星期四
- 题目编号:UVA 1374
- 题目大意:给出x的指数n,问,x经过多少次相乘才能得到x^n
- 输入:n
- 输出:次数
- 分析:
- 求乘法的所有可能方式,用dfs,适当剪枝优化,变成IDA*
- x的乘法,变成了指数的加法
- 每次不断平方,最少次数 为 不断平方的次数.这个为maxd起点
- 方法:
- 枚举每一位出现过的次数,当前字数加上枚举出来的次数,进入下一层dfs
- 剪枝:如果预计最少次数加上当前次数 > maxd,直接返回0
- 解题过程遇到问题:
- 没必要取最大值来判断剩下的,直接当前值不断平方(指数相加) 1<<(maxd - cur - 1)次即可
#include <vector> #include <list> #include <map> #include <set> #include <deque> #include <queue> #include <stack> #include <bitset> #include <algorithm> #include <functional> #include <numeric> #include <utility> #include <sstream> #include <iostream> #include <iomanip> #include <cstdio> #include <cmath> #include <cstdlib> #include <cctype> #include <string> #include <cstring> #include <cstdio> #include <cmath> #include <cstdlib> #include <ctime> using namespace std; typedef long long LL; #define CLR(x,y) memset((x),(y),sizeof((x))) #define FOR(x,y,z) for(int (x)=(y);(x)<(z);++(x)) #define FORD(x,y,z) for(int (x)=(y);(x)>=(z);--(x)) #define FOR2(x,y,z) for((x)=(y);(x)<(z);++(x)) #define FORD2(x,y,z) for((x)=(y);(x)>=(z);--(x)) const int maxn = 1000 + 10; int n,arr[maxn * 2];//arr保存出现过的指数 int dfs(int cur,int curd,const int & maxd){ if (curd == maxd) return arr[cur - 1] == n; //当前值最多可以平方(1<<(maxd - curd))次,计算这么多次数之后,是否小于n if (arr[cur-1] * 1<<(maxd - curd) < n) return 0; //枚举出现过的指数 FORD(i,cur - 1,0){ //产生新值,进入下一层 arr[cur] = arr[cur-1] + arr[i]; if (dfs(cur + 1,curd + 1, maxd)) return 1; arr[cur] = arr[cur-1] - arr[i]; if (dfs(cur + 1,curd + 1, maxd)) return 1; } return 0; } int init(){ int tmp = n,cnt = 0; while(tmp > 1){ tmp /= 2; ++cnt; } return cnt; } int main(){ //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); while (~scanf("%d",&n) && n){ for(int i = init();; ++i){ arr[0] = 1; if(dfs(1,0,i)){ printf("%d\n",i);break; } } } return 0; } |
以上是关于[2016-03-03][UVA][1374][Power Calculus]的主要内容,如果未能解决你的问题,请参考以下文章
[2016-03-03][UVA][120][Stacks of Flapjacks]