例题7-13 快速幂计算(Power Calculus, ACM/ICPC Yokohama 2006, UVa1374)

来源:互联网 发布:兴达驾校网络预约系统 编辑:程序博客网 时间:2024/05/16 05:57
选择适当的枚举策略,使得无需枚举整层树就能得到解。
这题选择了优先使用刚得到的数,且先加法后减法。
#include <iostream>#include <string>#include <vector>#include <stack>#include <queue>#include <deque>#include <set>#include <map>#include <algorithm>#include <sstream>#include <utility>#include <cstring>#include <cstdio>#include <cstdlib>#include <ctime>#include <cmath>#include <cctype>#define CLEAR(a, b) memset(a, b, sizeof(a))#define IN() freopen("in.txt", "r", stdin)#define OUT() freopen("out.txt", "w", stdout)#define LL long long#define mod 1000000007#define INF 1000000007#define eps 1e-5#define PI 3.1415926535898using namespace std;//-------------------------CHC------------------------------//int maxd;int a[15] = { 1 };int n;bool dfs(int d) {if (d == maxd) return a[d] == true;int M = *max_element(a, a + d + 1);if (M << (maxd - d) < n) return false;for (int i = d; i >= 0; --i) {a[d + 1] = a[d] + a[i];if (dfs(d + 1)) return true;a[d + 1] = a[d] - a[i];if (dfs(d + 1)) return true;}return false;}int main() {while (cin >> n && n) {for (maxd = 0; ; ++maxd)if (dfs(0)) break;cout << maxd << endl;}return 0;}

原创粉丝点击