UVA - 1374 - Power Calculus(迭代加深)

来源:互联网 发布:网页淘宝怎么退出登录 编辑:程序博客网 时间:2024/05/21 09:15

从小到大枚举可能的次数,然后迭代加深搜索验证


#include<cstdio>#include<cstring>#include<cctype>#include<cstdlib>#include<cmath>#include<iostream>#include<sstream>#include<iterator>#include<algorithm>#include<string>#include<vector>#include<set>#include<map>#include<deque>#include<queue>#include<stack>#include<list>#include<ctime>#define all(x) x.begin(), x.end()typedef long long ll;typedef unsigned long long llu;const int MAXN = 1000 + 10;const int MAXT = 1000 + 10;const int INF = 0x7f7f7f7f;const double pi = acos(-1.0);const double EPS = 1e-6;using namespace std;int a[MAXN], ans, n;bool dfs(int lur){    int pre = a[lur - 1];    if(lur == ans){        if(pre == n)  return true;        return false;    }    if((pre << (ans - lur)) < n)  return false;    for(int i = 0; i < lur; ++i){        a[lur] = pre + a[i];        if(a[lur] <= 1000 && dfs(lur + 1))  return true;        a[lur] = pre - a[i];        if(a[lur] > 0 && dfs(lur + 1))  return true;    }    return false;}int main(){    while(scanf("%d", &n) == 1 && n){        a[0] = 1;        for(ans = 1; !dfs(1); ++ans);        printf("%d\n", ans - 1);    }    return 0;}


0 0
原创粉丝点击