POJ 3134 IDDFS

Posted Flowersea

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了POJ 3134 IDDFS相关的知识,希望对你有一定的参考价值。

链接:

http://poj.org/problem?id=3134

题意:

给你一个n,让你从x出发只用乘除法,求最小的次数算出x^n,所有的使用乘方必须已知即曾经计算出来。

题解:

迭代加深搜索。n不超过1000,所以最深出现答案的层数不会太深,可以试用跌代加深搜索。即每次设定搜索层数,判断该层是否有解。若有解输出改成即可。需要剪枝操作。

代码:

31 int st[MAXN], top;
32 int n;
33 
34 bool dfs(int num, int depth) {
35     if (num > depth) return false;
36     if (st[top] == n) return true;
37     if (st[top] << (depth - num) < n) return false;
38     top++;
39     rep(i, 0, top) {
40         st[top] = st[top - 1] + st[i];
41         if (dfs(num + 1, depth)) return true;
42         st[top] = abs(st[top - 1] - st[i]);
43         if (dfs(num + 1, depth)) return true;
44     }
45     top--; 
46     return false;
47 }
48 
49 int main() {
50     while (cin >> n, n) {
51         rep(i, 0, MAXN) {
52             st[top = 0] = 1;
53             if (dfs(0, i)) {
54                 cout << i << endl;
55                 break;
56             }
57         }
58     }
59     return 0;
60 }

 

以上是关于POJ 3134 IDDFS的主要内容,如果未能解决你的问题,请参考以下文章

POJ 3134 Power Calculus (迭代剪枝搜索)

迭代加深搜索(以Power Calculus POJ--3134 UVa--1374为例)

POJ 3134 - Power Calculus

POJ3134 Power Calculus

POJ-3134-Power Calculus(迭代加深DFS)

POJ3134 Power Calculus IDA*搜索的一个应用