码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2017-09-05 23:10:53      阅读:229      评论:0      收藏:0      [点我收藏+]

标签:cal   color   重复   最大的   span   turn   tin   bre   ring   

本题代码如下:

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

int step,n;
int pow[1000];

bool dfs(int d,int maxd)///d即是所走步数
{
    if(pow[d]==n)
    {
        printf("%d\n",d);
        return true;
    }
    if(d==maxd) return false;
    int maxv = pow[0];
    for(int i = 1; i <= d; i++) maxv = max(maxv, pow[i]);
    if((maxv << (maxd-d)) < n) return false;///当其中最大的值乘以2的maxd-d次方以后仍然小于n,则剪枝
    for(int i=d; i>=0; i--)///重复数据对本题无影响,因为每次进行maxd的增大时,pow数组就相当于重新由第二位开始赋值,与先前相同的幂数也不会对结果产生影响,只是会增加所消耗的时间
    {
        pow[d+1]=pow[d]+pow[i];///先走加法再走减法
        if(dfs(d+1,maxd)) return true;
        pow[d+1]=pow[d]-pow[i];
        if(dfs(d+1,maxd)) return true;
    }
    return false;
}

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

 

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

标签:cal   color   重复   最大的   span   turn   tin   bre   ring   

原文地址:http://www.cnblogs.com/sapphirebitter/p/7482293.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!