UVa 1374 快速幂计算(dfs+IDA*)
2017-01-24 17:17
489 查看
https://vjudge.net/problem/UVA-1374
题意:给出n,计算最少需要几次能让x成为x^n(x和已经生成的数相乘或相除)。
思路:IDA*算法。
如果当前数组中最大的数乘以1<<(maxd-d)<n(即一直让最大的数相乘都无法到达n次方),此时可以剪枝。
题意:给出n,计算最少需要几次能让x成为x^n(x和已经生成的数相乘或相除)。
思路:IDA*算法。
如果当前数组中最大的数乘以1<<(maxd-d)<n(即一直让最大的数相乘都无法到达n次方),此时可以剪枝。
#include<iostream> #include<cstring> #include<algorithm> using namespace std; const int maxn = 1005; int n; int ans[maxn]; int maxd; bool dfs(int d, int cur) //深度、当前新增数 { if ((cur == n && d == maxd) || cur << (maxd - d) == n) return true; //得到目标状态 //如果当前新增数乘以1<<(maxd-d)等于n,就可以成功 //int r = 0; //for (int i = 0; i <= d; i++) r = max(ans[i], r); //r = max(cur, r); //if (d > maxd || r << (maxd - d) < n) return false; //剪枝 if (d > maxd || cur << (maxd - d) < n) return false; //剪枝 ans[d] = cur; for (int i = 0; i <= d; i++) { if (dfs(d + 1, cur + ans[i])) return true; if (dfs(d + 1, abs(cur - ans[i]))) return true; } return false; } void solve() { for (maxd = 0;; maxd++) { ans[0] = 1; if (dfs(0, 1)) { cout << maxd << endl; return; } } } int main() { //freopen("D:\\txt.txt", "r", stdin); while (cin >> n && n) { solve(); } return 0; }
相关文章推荐
- Uva1374 Power Calculus(快速幂计算)【IDA*】【例题7-13】
- UVA UVA - 1374 Power Calculus 快速幂计算(迭代加深搜索)
- [IDA*] UVa1374 Power Calculus 快速幂计算
- UVA1374(Power Calculus|快速幂计算)=》迭代加深搜
- UVa 1374 Power Calculus (快速幂计算)
- 例题7-13 快速幂计算(Power Calculus, ACM/ICPC Yokohama 2006, UVa1374)
- 紫书 例题 7-13 快速幂计算 UVA1374 IDA*搜索
- UVA - 1374 Power Calculus 搜索(IDA*)枚举答案
- uva1374 快速幂计算 迭代加深优先逼近
- UVA 1374 ——Power Calculus(IDA*搜索)
- UVa 1374 - Power Calculus(IDA*)
- UVa 1374:Power Calculus(IDA*)
- Editing a Book UVA - 11212(DFS+IDA*)
- IDDFS--UVA - 1374 Power Calculus
- UVa 1343 旋转游戏(dfs+IDA*)
- uva 1374 快速幂计算
- UVA - 1374 Power Calculus【IDA*】
- UVA - 1374 Power Calculus :IDA* 各种优化
- UVa 11212 编辑书稿(dfs+IDA*)
- UVa 1374 Power Calculus (IDA*或都打表)