UVA 1374 迭代加深搜索

原创 2018年04月15日 11:28:29

所谓迭代加深搜索实质:

限制每一次所搜的最大深度,然后进行dfs深搜,并且我们可以利用节点深度的性质来进行剪枝来优化算法,这个题中:由于深度固定,我们在当前层数上指数是a,最大深度为maxd,当前深度为cur,那么我们接下来几层向下深搜最大只会到达a<<(maxd-cur),以你为向下一层最大就是指数的二倍,那么剩余深度为(maxd - cur)自然而然就是上面答案,那么我们最重要的这一个剪枝就得到了,剩下的就只是迭代深度以及求解了

#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <cmath>
#include <vector>
#include <algorithm>

using namespace std;
int n,maxd;
int a[1100];
int Dfs(int cur,int num)//当前深度,当前数字
{
    if(cur == maxd && num == n)
        return true;
    if(num > 1000 || num <= 0 || cur >= maxd)
        return false;
    if( num << (maxd-cur) < n)//最大已经不能到达n了,就进行剪枝,
        return false;

    for(int i =0 ;i < cur;i ++)
    {
        a[cur] = a[i] + num;
        if(Dfs(cur+1,a[cur]))
            return true;
        a[cur] = num - a[i];
        if(Dfs(cur+1,a[cur]))
            return true;
    }
    return false;
}

int main()
{
    while(~scanf("%d",&n) && n)
    {
        a[0] = 1;
        for(maxd = 1;; maxd++){
            if(Dfs(1,1))
            {
                printf("%d\n",maxd-1);
                break;
            }
        }
    }
    return 0;
}

UVA - 1374 Power Calculus

题目大意:给出 n,问说至少计算几步得到 x^n。解题思路:迭代深搜,枚举步数,然后深搜判断是否可行。需要优化,当当前数s按照最大方案执行后仍然小于n,则说明不可行。#include int n, ...
  • kl28978113
  • kl28978113
  • 2015-06-10 21:03:53
  • 1907

UVA 1374 Power Calculus(迭代深搜)

题意: 给出x和正整数n,问最少需要几次乘或者除法,可以得到 n=xmn = x^m 思路: 其实是关于指数的操作,即从1到m最少的步数。我们可以先确定最少步数mm,然后进行迭代,迭代的过程也...
  • HelloWorld10086
  • HelloWorld10086
  • 2015-07-18 19:26:30
  • 905

UVA 1374 迭代加深搜索

http://vjudge.net/contest/view.action?cid=50643#problem/C
  • u013573047
  • u013573047
  • 2014-07-25 10:24:35
  • 520

Uva1374 Power Calculus(快速幂计算)【IDA*】【例题7-13】

IDA*,搜索过程应该自己思考,还有就是剪枝!!!
  • GuoZLH
  • GuoZLH
  • 2017-02-14 12:59:07
  • 427

UVa 1374 - Power Calculus(IDA*)

给出一个数,进行加减运算,可以使用中途计算的结果,最少经过多少次可以获得目标值。中途的运算不能出现负数。 按照书上说的,每次只去最后生成的数进行运算,当那个数乘2^(maxd-d)小于目标值时,剪枝。...
  • wcr1996
  • wcr1996
  • 2015-02-08 04:24:01
  • 1238

uva 1374(暴力)

题意:给出一个数字x,然后n = 1,每次计算可以让n翻倍,或者加或减之前x计算得过的数,问至少经过几次计算可以让n等于x。 题解:枚举次数,然后dfs是否能在这个次数得到x。#include c...
  • u013392752
  • u013392752
  • 2015-05-07 00:36:47
  • 953

uva1374

题目描述:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=41552/* solution: 迭代搜索+最优性剪枝,状态...
  • qq_29169749
  • qq_29169749
  • 2016-05-15 22:58:49
  • 230

uva 1374 - Power Calculus(迭代深搜)

题目链接:uva 1374 - Power Calculus 题目大意:给出n,问说至少计算几步得到x^n。 解题思路:迭代深搜,枚举步数,然后深搜判断是否可行。需要优化,当当前数...
  • u011328934
  • u011328934
  • 2013-12-28 21:17:02
  • 1557

UVa 1374 - Power Calculus <IDA*算法>

本题值得学习的地方就是乐观估计函数的推到,需要数学指数的运算,另外计算2的n次方的时候可以用1 另外对于当前的集合存储,用C数列存储再合适不过了,刚开始用set来存,对数据进行增删浪费了大量时间,而...
  • kun768
  • kun768
  • 2015-02-07 14:25:11
  • 440
收藏助手
不良信息举报
您举报文章:UVA 1374 迭代加深搜索
举报原因:
原因补充:

(最多只允许输入30个字)